裁剪并保持图像的大小android

这是一个非常难以用语言解释的问题(无论如何它都适合我)。我需要能够拍摄图像(位图)并将图像裁剪到屏幕中心的特定尺寸,但保持图像的大小相同。希望下面的图片可以解释我的意思: 因此整个图像被裁剪到中间的正方形,但没有在屏幕上拉伸并保持在中心,所以基本上删除了图像的无意义部分,但保持像素的坐标相同。     
已邀请:
因此,假设您已经完成了脸部检测,并在图像中找到了一张脸。你的图像是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);
    
如果我了解你并不想剪裁你的图像,而是“隐藏”广场周围的任何像素。 根据您的尝试,有很多方法可以做到这一点。例如,您可以用黑色填充图片中不感兴趣的部分或使其透明。 这样,“裁剪”图片的坐标在屏幕上保持不变。     
如果你感兴趣的只是图像的中心,那么一个非常简单的方法就是将android:scaleType =“center”属性添加到你的ImageView中,并将ImageView设置为你想要的裁剪尺寸。但是,如果你想让它成为可定位的,那就是另一回事了。 使用
Canvas.drawBitmap()
,您可能能够将图像的一部分复制到不同的位图,并丢弃另一个位图。使用此特定版本的方法,您可以使用
getPixels()
发送颜色数组,并设置偏移量以及要复制的宽度和高度。
stride
参数很重要,因为它需要设置为原始图像的宽度,即使最终图像会更小,因为它会从原始图像中提取像素。     

要回复问题请先登录注册