Android 检测图像(位图)上色斑的触摸

Android 检测图像(位图)上色斑的触摸,android,android-layout,Android,Android Layout,我需要检测触摸图片下方的红点,所以触摸后我可以采取行动。 我想我需要检测触摸坐标,并检查它是否匹配红点。但我怎样才能检测出红点的位置呢?可能吗? 注:如果有帮助,我可以选择图像格式,但我们可能需要使用位图 我需要以编程方式获取点位置。我收到图片,我需要处理点上的触摸事件。但我可以用不同的点位置接收不同的图像 谢谢你的所有想法 我会用一个。视图层次结构应为: <FrameLayout> <ImageView vineyard> <LinearLayout

我需要检测触摸图片下方的红点,所以触摸后我可以采取行动。 我想我需要检测触摸坐标,并检查它是否匹配红点。但我怎样才能检测出红点的位置呢?可能吗? 注:如果有帮助,我可以选择图像格式,但我们可能需要使用位图

我需要以编程方式获取点位置。我收到图片,我需要处理点上的触摸事件。但我可以用不同的点位置接收不同的图像

谢谢你的所有想法

我会用一个。视图层次结构应为:

<FrameLayout>
   <ImageView vineyard>
   <LinearLayout dots_holder>
      <ImageView dot1/>
      <ImageView dot2/>
      <ImageView dotn/>
   </LinearLayout>
</FrameLayout>
您的圆点将覆盖在葡萄园图像上,您可以为每个圆点添加一个OnClickListener。对于每个dot ImageView的位置和尺寸,我会在代码中进行一些动态计算。

我会使用一个。视图层次结构应为:

<FrameLayout>
   <ImageView vineyard>
   <LinearLayout dots_holder>
      <ImageView dot1/>
      <ImageView dot2/>
      <ImageView dotn/>
   </LinearLayout>
</FrameLayout>

您的圆点将覆盖在葡萄园图像上,您可以为每个圆点添加一个OnClickListener。对于每个点图像视图的位置和尺寸,我会在代码中进行一些动态计算。

有很多方法。您可以使用SemperFly的方法。还有用于视图的onTouchListeners,它将为您提供坐标。您可能需要平移坐标以处理不同的屏幕密度

您还可以将图像分割成网格,这样可以简化或避免数学运算。另一种选择是将图像分割成瓷砖。你也可以使用类似RelativeLayout的东西


您需要多精确的触摸检测

有很多方法。您可以使用SemperFly的方法。还有用于视图的onTouchListeners,它将为您提供坐标。您可能需要平移坐标以处理不同的屏幕密度

您还可以将图像分割成网格,这样可以简化或避免数学运算。另一种选择是将图像分割成瓷砖。你也可以使用类似RelativeLayout的东西


您需要多精确的触摸检测

我看到的最简单的解决方案是:

1-获取imageView大小,因为它可能会根据设备屏幕大小和/或分辨率而改变

int IVwidth = imageView.getWidth();
int IVHeight = imageView.getHeight();
2-获取位图宽度/高度,然后找到位图宽度和imageView宽度之间的数学关系比率, 简单地说:

假设我们有一个800*600大小的位图和一个400*300大小的imageView 这将使高度和宽度的比率为2.0

3-现在,当事件ImageViewTouch被触发时,您可以很容易地获得触摸坐标,因为事件会将它们传递给您。请注意,捕捉触摸事件非常简单,只需将其添加到视图中即可实现

    ImageView iv = (ImageView) findViewById(R.id.imageView1);
    iv.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View arg0, MotionEvent arg1) {

            if(arg1.getAction() == MotionEvent.ACTION_UP)
            {
                int x = arg1.getX();
                int y = arg1.getY();
                int XonImage = x * WidthRatio;
                int YonImage = Y * HeightRatio;
                if(bm.getPixel(XonImage, YonImage) == Color.RED)
                {
                 // BINGOOOOOOO, do your magic here
                }
            }

            return false;
        }
    });
如需更多信息,请毫不犹豫地询问。
干杯

我看到的最简单的解决方案是:

1-获取imageView大小,因为它可能会根据设备屏幕大小和/或分辨率而改变

int IVwidth = imageView.getWidth();
int IVHeight = imageView.getHeight();
2-获取位图宽度/高度,然后找到位图宽度和imageView宽度之间的数学关系比率, 简单地说:

假设我们有一个800*600大小的位图和一个400*300大小的imageView 这将使高度和宽度的比率为2.0

3-现在,当事件ImageViewTouch被触发时,您可以很容易地获得触摸坐标,因为事件会将它们传递给您。请注意,捕捉触摸事件非常简单,只需将其添加到视图中即可实现

    ImageView iv = (ImageView) findViewById(R.id.imageView1);
    iv.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View arg0, MotionEvent arg1) {

            if(arg1.getAction() == MotionEvent.ACTION_UP)
            {
                int x = arg1.getX();
                int y = arg1.getY();
                int XonImage = x * WidthRatio;
                int YonImage = Y * HeightRatio;
                if(bm.getPixel(XonImage, YonImage) == Color.RED)
                {
                 // BINGOOOOOOO, do your magic here
                }
            }

            return false;
        }
    });
如需更多信息,请毫不犹豫地询问。
干杯

这里的问题是图像带有红点。我需要检测这个点上的触摸,这样我就可以在弹出窗口中显示一些信息。只需在每个点上放置一个空视图。上述原理同样适用。但如何检测网点位置?我有带点的图像,但我不知道它们的位置。我需要从图中找出每个点的x/y百分比。例如,图像是344x253px。第一个点是110135。110/344=31.9%x和135/253=53.3%。所以这个圆点是从左边的31.9%,从上面的53.3%。你应该在问题中明确这一点。我建议看一下照片识别算法。这里的问题是图像带有红点。我需要检测这个点上的触摸,这样我就可以在弹出窗口中显示一些信息。只需在每个点上放置一个空视图。上述原理同样适用。但如何检测网点位置?我有带点的图像,但我不知道它们的位置。我需要从图中找出每个点的x/y百分比。例如,图像是344x253px。第一个点是110135。110/344=31.9%x和135/253=53.3%。所以这个圆点是从左边的31.9%,从上面的53.3%。你应该在问题中明确这一点。我建议看一下照片识别算法。这里的问题是图像带有红点。我需要检测这个点上的触摸,这样我就可以在弹出窗口中显示一些信息。这里的问题是,图像带有红点。我需要检测这个点的触摸,这样我就可以在po中显示一些信息
小狗,很好。。。什么是bm?bm是ImageViewNice的位图。。。什么是bm?bm是ImageView的位图