1

カラーモードのカメラで撮影した写真を白黒として保存することは可能ですか? または、写真を撮ったときにビューファインダーが白黒で見えるようにカメラのパラメーターを変更する必要がありますか? 画像をカラーで保存するために使用しているコードは次のとおりです。スペースを節約するために白黒で保存したいと思います。

   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

3 に答える 3

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;
}
于 2012-07-25T15:05:50.443 に答える
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()を呼び出すことを忘れないでください。

于 2012-07-25T15:07:03.557 に答える
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

于 2012-07-25T15:01:41.237 に答える