假设您已完成人脸检测,并在图像中找到了一张人脸。您的图像为 320 x 240,脸部由位置为 100,40 且宽度为 20 x 30 的矩形包围。现在您想如何处理这些信息?我会尽力提供帮助,但您可能需要澄清我的任何错误假设。
首先,您可以抓取面部并将其存储到一个新的位图中,其中包含Bitmap.createBitmap() 之类的内容:
Bitmap face = Bitmap.createBitmap(largeSource, 100, 40, 20, 30);
这应该在绘图循环之外完成,例如在 onCreate 或其他一些初始化步骤中。
听起来您有一些容器(ImageView?具有覆盖 onDraw 的自定义视图?),其中包含您的大图像。现在您只想在该容器中的原始位置绘制脸部?如果你有一个自定义视图,那么在你的 onDraw 中就像下面这样简单:
canvas.drawBitmap(face, 100, 40, facePaint);
如果您改用 ImageView,我建议您改用自定义绘制的视图,因为听起来您需要一些细粒度的绘图控件。
最后,如果你有一堆这样的面孔,创建一个新的 FaceObj POJO 对象,它只有一个位图、x 和 y 坐标。当您检测到面部时,将它们添加到 ArrayList,然后在 onDraw 中对其进行迭代以绘制所有面部:
faces.add(new FaceObj(Bitmap.createBitmap(largeSource, 100, 40, 20, 30), 100, 40);
...
foreach(FaceObj f : faces)
canvas.drawBitmap(f.bitmap, f.x, f.y, facePaint);