Android:裁剪位图(以奇怪的方式)

时间:2011-07-05 13:55:43

标签: android eclipse bitmap crop

我正在制作一款需要用户自己拍照的应用。

这些问题都源于图像必须是480 x 800的事实。 我正在使用的设备上的摄像头(摩托罗拉Xoom)显然不支持该宽高比。

我正在寻找一种方法来拍摄更大尺寸的照片(1280 x 960有足够大的高度),然后从两侧,顶部和底部开始剃掉大块。

因此,如果任何人可以提供一种方法(或更好的主意),我将非常感激。

谢谢。

1 个答案:

答案 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;
    }
}