保存黑白照片

时间:2012-07-25 14:57:39

标签: android

是否可以将使用相机拍摄的照片以彩色模式保存为黑白,或者是否必须更改相机参数,以便在拍摄照片时取景器看到黑白?这是我用来保存图像颜色的代码,我想将其保存为黑白,以节省空间。

   PictureCallback jpegCallback = new PictureCallback() {
    @Override
        public void onPictureTaken(byte[] data, Camera camera) { 
        Log.e("Pic Taken","Callback");
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inSampleSize = 1;

        options.inDither = false; // Disable Dithering mode
        options.inPurgeable = true; // Tell to gc that whether it needs free
                                    // memory, the Bitmap can be cleared
        options.inInputShareable = true; // Which kind of reference will be
                                            // used to recover the Bitmap
                                            // data after being clear, when
                                            // it will be used in the future
        options.inTempStorage = new byte[32 * 1024];
        options.inPreferredConfig = Bitmap.Config.RGB_565;
        Bitmap bMap = BitmapFactory.decodeByteArray(data, 0, data.length, options);

        int orientation;
        // others devices
        if(bMap.getHeight() < bMap.getWidth()){
            orientation = 90;
        } else {
            orientation = 0;
        }

        Bitmap bMapRotate;
        if (orientation != 0) {
            Matrix matrix = new Matrix();
            matrix.postRotate(orientation);
            bMapRotate = Bitmap.createBitmap(bMap, 0, 0, bMap.getWidth(),
                    bMap.getHeight(), matrix, true);
        } else
            bMapRotate = Bitmap.createScaledBitmap(bMap, bMap.getWidth(),
                    bMap.getHeight(), true);


        FileOutputStream out;
    boolean mExternalStorageAvailable = false;
    boolean mExternalStorageWriteable = false;
        try {
              Log.e("Saving","Pic");
        String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
        String fileName = "/" + System.currentTimeMillis() + ".jpg";

            out = new FileOutputStream(baseDir + fileName);

            bMapRotate.compress(Bitmap.CompressFormat.JPEG, 25, out);
            if (bMapRotate != null) {
                bMapRotate.recycle();
                bMapRotate = null;
            }


        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
};

4 个答案:

答案 0 :(得分:4)

您可以转换位图:

public Bitmap convertToGrayScale(Bitmap original) {        
    Bitmap result = Bitmap.createBitmap(original.getWidth(), original.getHeight(), Bitmap.Config.RGB_565);
    Canvas canvas = new Canvas(result);
    Paint paint = new Paint();
    ColorMatrix matrix = new ColorMatrix();
    matrix.setSaturation(0);
    ColorMatrixColorFilter f = new ColorMatrixColorFilter(matrix);
    paint.setColorFilter(f);
    canvas.drawBitmap(original, 0, 0, paint);
    return result;
}

答案 1 :(得分:1)

您可以将现有照片转换为黑白照片。后:

else
        bMapRotate = Bitmap.createScaledBitmap(bMap, bMap.getWidth(),
                bMap.getHeight(), true);

添加:

Bitmap newBitmap = Bitmap.createBitmap(bMapRotate.getWidth(), bMapRotate.getHeight(), Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(newBitmap);
Paint paint = new Paint();
ColorMatrix colorMatrix = new ColorMatrix();
colorMatrix.setSaturation(0);
ColorMatrixColorFilter cmFilter = new ColorMatrixColorFilter(colorMatrix);
paint.setColorFilter(cmFilter);
canvas.drawBitmap(bMapRotate, 0, 0, paint);

不要忘记在bMapRotate上调用.recycle()。

答案 2 :(得分:0)

它应该在Camera.parameters

中提供

根据设备的相机是否支持,您可以使用它。

使用此代码检索它们:

Camera.Parameters params = cam.getParameters();
try {           
    for (String e : params.getSupportedColorEffects()) {
        Log.d(TAG, "Effect: " + e);
    }
}
catch (NullPointerException npe) {
    Log.d(TAG, "No color effects supported by this camera.");           
}

阅读文档:

http://developer.android.com/reference/android/hardware/Camera.Parameters.html

答案 3 :(得分:0)