让我们说例如我有一张树的位图图像,我想在树叶上放置其他图像(例如苹果的位图)。有没有办法让我可以在叶子上放置标记...例如红点......然后以编程方式将苹果图像放在那些点的中心?
作为一个非常基本的测试,我的图像是白色背景,中间有一个红色像素。我想计算这个红点的坐标,然后设置一个ImageView放在那些坐标上。
我怎么能这样做?
答案 0 :(得分:0)
取决于你的红点'标记是。如果它位于中心或任何特定点(如宽度的2/3,高度的1/3),则可以将布局宽度和高度分开以获得正确的坐标。
在其他情况下,最好在覆盖dispatchDraw方法中手动设置白色背景和绘制标记。在这种情况下,您只需知道标记的坐标。
答案 1 :(得分:0)
您想要将图像放在红点上,对吗?
我正在考虑两种不同的方式:
A->您可以将红点设为ImageView本身,然后使用gravity将其居中,以便将其转换为另一种图像。
或者...
B->制作一个使用带红点的白色背景作为背景资源的容器。然后使用gravity将其居中,最后将图像定位到容器的中心,使其位于红点上方。
如果您认为这有帮助,则无需计算。
答案 2 :(得分:0)
听起来你是将标记放在你的位图上的那个。
如果是这种情况,您是否有理由尝试将标记作为数据嵌入位图本身?这导致您必须重新发现位置的问题。这可能是一个模糊的任务......如果树旁边有一个红色的谷仓怎么办?你打算在构成谷仓的每个红色像素上放一个苹果图像吗?
您可能真正想要的是定义一种格式,其中包含一个没有标记的位图,然后是一个单独的坐标列表,您可以将苹果放在哪里。这并不需要发现任何类型......您只需将图像与列表一起发送即可。
在某些情况下,旁边没有""您可以放置信息,实际上需要它进入位图文件。如果是这样,还要考虑一些隐藏的地方,你可以将数据放在位图......元数据,如Exif:
http://en.wikipedia.org/wiki/Exchangeable_image_file_format
因此,这是一个中间立场,在那里你可以设法获得积分列表,然后躲避"进入包含图像的文件,而不需要修改像素。
如果您发现自己确实陷入必须将这些坐标规格放入图像数据的情况下,那么比红点更独特的东西将更容易被确定地检测到。也许您对图像有所了解...例如,它们是PNG文件,并且没有任何透明度。您可以使透明点表示替换点。
模式越大越奇怪,它就越罕见......所以如果你知道粘贴的物体总是大于3x3,你可能会为你的标记找到一个非常不寻常的3x3像素印记。不太可能在自然界中发生。未压缩的24位颜色,一个足够随机的模式只会偶然发生1 /(2 ^ 24 ^ 9)。少数;虽然压缩会产生更多灰色区域。
但更重要的是:如果你没有充分的理由将一个简单的问题变成一个复杂的图像识别练习,那就不要了。只需将点列表保留在某处,这样您就不必在图像中寻找它们。