2014-04-25 32 views
0

比方说,例如,我有一棵树的位图图像,并且我想在树叶上放置其他图像(例如苹果的位图)。有没有一种方法可以将标记放在树叶上......例如红点......然后以编程方式将苹果图像放在这些点上?基于在另一个图像中检测参考点来定位图像

作为一个非常基本的测试,我有一个白色背景的图像,中心有一个红色像素。我想计算这个红色点的坐标,然后设置一个ImageView放置在这些坐标上。

我该怎么办?

+0

欢迎来到StackOverflow!我编辑了你的问题,试图捕捉你的意思是更好一点。您还可以编辑您的问题,使用编辑按钮...还可以查看[编辑者的历史记录](http://stackoverflow.com/posts/23287730/revisions) – HostileFork

回答

0

这取决于你的'红点'标记在哪里。如果它位于中心或任何特定点(如宽度的2/3,高度的1/3),则可以将布局宽度和高度分开以获得正确的坐标。

在其他情况下,最好是在overriden dispatchDraw方法中手动设置白色背景和绘制标记。在这种情况下,您只需知道标记的坐标。

0

你想在红点上放置一个图像,对不对?

我想到的两种不同的方式:

A->你可以做的红点是一个ImageView的本身,然后才能将其转换成另一种形象的使用gravity定心它。

或者......

B->请使用白色背景的红点作为背景资源的容器。然后使用gravity居中它,最后,将图像定位到容器的中心,以便它位于红点之上。

如果您的事情有所帮助,则无需计算。

+0

感谢您的回复。中心的红点就是例子,它可以在图像上的任何地方。例如,我有树的图像,我需要在树叶上放置另一个图像(苹果)。我想也许有一种方法,我可以把红点放在树叶上,然后以编程方式将苹果图像放在树叶上。 – user3228277

+0

我看,以及如何使用[MotionEvent](http://developer.android.com/reference/android/view/MotionEvent.html?[链接]你可以得到getX()和getY()方法的坐标。但是它是像素依赖我想,所以你可能需要做一些计算 – Selz

+0

是的,但我想只用于onStart位置用户不需要触摸屏幕,我会调查这一点,也许我可以找到东西。 – user3228277

0

这听起来像你是把标记放到你的位图上的那个人。

如果是这样,是否有一个非常好的理由,你为什么想试图将标记作为数据嵌入到位图本身?这会导致您不得不重新发现位置的问题。这可能是一项模糊的任务......如果树旁有一个红色的谷仓怎么办?你打算在构成谷仓的每个红色像素上放一个苹果图像吗?

你可能真正想要的是定义一个格式,它有一个没有标记的位图,然后是一个单独的坐标列表,用于你想要苹果去的地方。这并不需要任何发现......你只需将图像与列表一起发送,即可完成。

在某些情况下,您可以放置​​信息并且实际上需要将它放入位图文件中。如果是这样,也考虑到有一些隐蔽的地方,你可以把数据位图...像元数据的Exif:

http://en.wikipedia.org/wiki/Exchangeable_image_file_format

所以这是一个中间路线,在那里你可以设法得到点列表以“存放”到包含图像的文件中,而实际上不需要修改像素。

如果你发现你真的陷入了这种情况,你必须将这些坐标规格放入图像数据中,那么比红点更独特的东西更容易被确定。也许有一些你知道你的图片......例如,他们是PNG文件,并没有任何透明度。您可以使透明点表示替代点。

模式越大越稀有......所以如果你知道你粘贴的对象总是会比3x3大,你可以为你的标记提供一个非常不寻常的3x3像素印记,本质上不太可能发生。未经压缩的24位颜色,一个足够随机的模式只会偶然发生1 /(2^24^9)。少数;尽管压缩会产生更多的灰色区域。

但是更重要的是:如果你没有充分的理由将一个简单的问题变成复杂的图像识别练习,那么不要这样做。只需将点的列表保留在某个地方,以便您不必在图像中搜索它们。

+1

感谢您的好解释! – user3228277

相关问题