gpt4 book ai didi

java - 裁剪并保持图像android的大小

转载 作者:行者123 更新时间:2023-11-29 06:16:43 27 4
gpt4 key购买 nike

这是一个很难用语言解释的问题(无论如何对我来说都是如此)。我需要能够拍摄图像(位图)并将图像裁剪到屏幕中央的特定尺寸,但要保持图像的尺寸不变。希望下图可以解释我的意思:

enter image description here

所以图像作为一个整体被裁剪到中间的正方形但没有在屏幕上拉伸(stretch)并保持在中心,所以基本上删除图像的无意义部分但保持像素的坐标一样。

最佳答案

假设您已经完成人脸检测,并在您的图像中找到了一张脸。你的图像是 320 x 240,人脸被位置 100,40 和宽度 20 x 30 的矩形包围。现在你想用这些信息做什么?我会尽力提供帮助,但您可能需要澄清我的任何错误假设。

首先,您可以抓取人脸并将其存储到一个新的位图中,类似 Bitmap.createBitmap() :

Bitmap face = Bitmap.createBitmap(largeSource, 100, 40, 20, 30);

这应该在绘制循环之外完成,例如在 onCreate 或其他一些初始化步骤中。

听起来您有一些容器(ImageView?具有覆盖的 onDraw 的自定义 View ?),其中包含您的大图像。现在您只想在容器中的原始位置绘制面部?如果你有一个自定义 View ,那么在你的 onDraw 中就像下面这样简单:

canvas.drawBitmap(face, 100, 40, facePaint);

如果您使用的是 ImageView,我建议改用自定义绘制的 View ,因为听起来您需要一些细粒度的绘图控件。

最后,如果您有一堆这样的面孔,请创建一个新的 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);

关于java - 裁剪并保持图像android的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4829157/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com