我正在制作一款需要用户自己拍照的应用。
这些问题都源于图像必须是480 x 800的事实。 我正在使用的设备上的摄像头(摩托罗拉Xoom)显然不支持该宽高比。
我正在寻找一种方法来拍摄更大尺寸的照片(1280 x 960有足够大的高度),然后从两侧,顶部和底部开始剃掉大块。
因此,如果任何人可以提供一种方法(或更好的主意),我将非常感激。
谢谢。
答案 0 :(得分:1)
更好的想法是将图像的大小调整为最大宽度480或高度最大800,并使用适当的填充显示。 这是一种简单的方法:
import android.graphics.Bitmap;
public class ImageUtils {
public static Bitmap BitmapResizeToMaxXorY(Bitmap srcBitmap, int destSizeX, int destSizeY) {
Bitmap ret = null;
if (srcBitmap != null && destSizeX > 0 && destSizeY > 0) {
Float origSizeX = new Float(srcBitmap.getWidth());
Float origSizeY = new Float(srcBitmap.getHeight());
if (origSizeX > destSizeX || origSizeY > destSizeY) {
float origRatio = origSizeX / origSizeY;
float destRatio = destSizeX / destSizeY;
float targetSizeX;
float targetSizeY;
if (origRatio >= destRatio) {
if (destSizeX >= origSizeX) {
targetSizeX = origSizeX;
} else {
targetSizeX = destSizeX;
}
targetSizeY = targetSizeX / origRatio;
} else {
if (destSizeY >= origSizeY) {
targetSizeY = origSizeY;
} else {
targetSizeY = destSizeY;
}
targetSizeX = targetSizeY * origRatio;
}
ret = Bitmap.createScaledBitmap(srcBitmap, (int) targetSizeX, (int) targetSizeY, false);
} else {
// original image is smaller than destination sizes so we are returning original
ret = srcBitmap;
}
}
return ret;
}
}