【问题标题】:Android converting touch points to actual bitmap points on an imageAndroid将触摸点转换为图像上的实际位图点
【发布时间】:2014-09-13 04:44:32
【问题描述】:

这是我的问题:

我有一个显示图像的 Android 应用程序。无论大小如何,图像本身都会调整为 480 x 640。

用户可以点击图像的多个点。根据用户点击图像的位置,位图本身会应用一些变形。

假设原始图像为 1000 x 2000(使用整数使其更简单)。 一旦图像加载到 ImageView 中,它就会缩放以在 imageview 中正确显示。

这对于不同分辨率的手机来说显然是不同的。

现在,当用户点击不同的点时,我最终希望将这些点与位图数据一起传递给我的 WCF 服务,以执行一些图像处理。

所以我的问题是如何获取用户在手机上触摸的点并将它们转换为相对于正常未缩放位图的点。

总结:

位图被缩放以适应。用户点击次数为 100,100。 100,100 是相对于缩放图像的点......不是实际的位图本身。我正在寻找有关如何将 100,100 转换为实际位图上的点的指导。

提前感谢您提供的任何帮助。

【问题讨论】:

  • 图像是缩放以保持比例,还是恰好适合 480x640 框?
  • 嗨,戴夫...图像未缩放。它只是加载到一个典型的 ImageView 中。在我将其发送到 REST 服务之前,它已被缩放。所以最终,用户点击手机上的点。这些点是相对于 ImageView 的。在将图像发送到 REST 服务进行图像处理之前,我将其缩放到 480 x 640 并保留 RATIO PRESERVED。我需要在图像上单击的那些点相对于 480 x 640 图像进行转换。抱歉,如果这没有意义。如果您知道我的意思,我正在尝试解释它而不会过度解释。谢谢

标签: android image bitmap scale points


【解决方案1】:

好的,Android ImageView 的默认 ScaleType 为 FIT_CENTER,也就是说:

public static final Matrix.ScaleToFit CENTER

计算将保持原始 src 纵横比的比例,但是 还将确保 src 完全适合 dst。至少一个轴 (X 或 Y)将完全适合。结果以 dst 为中心。

所以如果你的整个图像视图有 480x640 来显示图像,例如你的图像是 1000x2000,那么:

2000/640 = scaleFactor = 3.125/1

所以宽度会缩小到 320,两边各留 80 个像素,所以它可以保持纵横比。

//this one will be 80.
int xBuffer= (imageViewWidth - (realImageWidth*scaleFactor))/2;
//this one will be zero in your example    
int yBuffer = (imageViewHeight - (realImageHeight*scaleFactor))/2; 


int imageViewX = 0;//x coord where on the image view it was clicked
int imageViewY = 0;//y coord where on the image view it was clicked

if (imageViewX < xBuffer || imageViewX > imageViewWidth-xBuffer)
{
     //ignore the click, outside of your image.
}
else if (imageViewY < yBuffer || imageViewY > imageViewHeight-yBuffer)
{
     //ignore the click, outside of your image.
}
else
{
    realImageY = imageViewY * scaleFactor;
    realImageX = (imageViewY - 80) * scaleFactor;
    //save click somehow..
    saveClick(realImageX,realImageY);
}

【讨论】:

  • 戴夫非常感谢您的回复。我要去玩这个,看看它是否适合我。如果是这样,我会很快接受你的回答。如果不是,我可能对您的回答还有几个问题。再次感谢
  • 戴夫非常感谢您的回答。这对我帮助很大。标记
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
  • 2021-06-04
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
相关资源
最近更新 更多