java特征像素坐标_java – ImageView坐标与位图像素之间的对应关系 – Android

本文介绍了如何在Android中处理ImageView和Bitmap之间的像素坐标转换,特别是在用户选择一个矩形区域时,如何确定位图中的对应像素。通过计算比例,将ImageView的坐标转换为Bitmap的像素坐标,并讨论了处理非整数像素的方法,如使用floor()函数来决定发送到服务器的像素。内容详细解释了转换过程和可能的取舍。
摘要由CSDN通过智能技术生成

利玛窦,

这似乎是一个问题,您可以(主观地)容忍您发送到服务器的像素有多少错误.事实上,对于任何不会出现一个漂亮整洁整数的宽高比,您必须决定“推”选择框的方向.

您链接的解决方案是完美的解决方案.你必须问自己:用户是否注意到,如果我处理的图像是从屏幕上显示的选择框中的一个像素?我的猜测可能不是当用触摸屏上的大胖手指选择一个矩形时,我无法想像用户将具有像素精度:D

由于是这种情况,所以我可以让抛出一个整数时发生的floor() – 来处理最终传递给服务器的像素.

我们来看一个例子.

让我们将ImageView和Bitmap的宽度和高度定义为:

ImageViewWidth = 400, ImageViewHeight = 150

BitmapWidth = 176, BitmapHeight = 65

然后,您将使用它们在其间转换选择框的宽高比为:

WidthRatio = BitmapWidth / ImageViewWidth = 175 / 400 = 0.44

HeightRatio = BitmapHeight / ImageViewHeight = 65 / 150 = 0.44

一些不错的丑陋的数字. ImageView中的任何像素都将对应于Bitmap中的像素,如下所示:

BitmapPixelX = ImageViewPixelX * WidthRatio

BitmapPixelY = ImageViewPixelY * HeightRatio

现在我把这个Bitmap放在我的ImageView的屏幕上,供用户选择一个矩形,用户在ImageView中选择一个有左上角和右下角坐标的矩形:

RectTopLeftX = 271, RectTopLeftY = 19

RectBottomRightX = 313, RectBottomRightY = 42

如何确定位图中哪些像素对应?简单.我们之前确定的比率.现在我们来看看左上角的坐标.

RectTopLeftX * WidthRatio = 271 * .44 = 119.24

RectTopLeftY * HeightRatio = 19 * .44 = 8.36

对于RectTopLeftX,我们发现我们的BitmapPixelX值为119,然后是四分之一的像素.那么,如果我们把这个值和对应的BitmapPixelY的值为8.36,我们将把像素(119,8)发送到服务器进行处理.如果我们要ceil()这些值,我们将发送像素(120,9)到服务器进行处理.这是完全取决于你的部分.

你将(几乎)总是落在像素的一些小数部分.无论你发送你所在的像素,还是旁边的像素是你的电话.我会说这是你的用户完全不明显的,所以要重申一下,只要让抛出一个整数就会发生的floor() – .

希望有帮助!

[编辑]

再次慢慢阅读这个问题,我想我更好的理解你的问题/困惑.我将用上面的例子来说明.

您说的是Bitmap中有176个像素,ImageView中有400个像素.因此,从一个到另一个的映射不是1:1,这将在找出要提取的像素进行处理时会产生问题.

但它不!当您将ImageView中的矩形边界的坐标转换为位图中的坐标时,您只需在“位图”中给出像素范围即可迭代.它不是描述ImageView中每个像素如何映射到Bitmap中相应的像素.

我希望清除我对你的困惑的困惑.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值