Android, сохраняющий 3 растровых изображения как 1 - PullRequest
2 голосов
/ 04 сентября 2011

У меня есть приложение, которое делает снимок. Он создает 2 подмножества растровых изображений, обрабатывает эти растровые изображения с искажением, а затем помещает подмножества поверх оригинала как наложения. Есть ли способ сохранить все три растровых изображения как одно (как это отображается на экране телефона)? Я хотел бы сохранить то, что пользователь видит на экране в качестве четвертого растрового изображения на SD-карте? У меня такое чувство, что я сделал это неправильно.

Спасибо

[update1]

@Override
    public void onDraw(Canvas canvas){
        super.onDraw(canvas);

        Log.e(TAG, "******about to draw bgr ");
        canvas.drawBitmap(bgr, 0, 0, null);

        if (isLocked == true && bothCirclesInPlace == true){
            if(overLay != null)
             canvas.drawBitmap(overLay, centreX-radius, centreY-radius, null);
            if(overLay2 != null)
             canvas.drawBitmap(overLay2, centreA-radius, centreB-radius, null);
        }

Ответы [ 3 ]

3 голосов
/ 05 сентября 2011

Да, можно наложить несколько растровых изображений и сохранить как один файл изображения (PNG / JPEG / ..).

Один из способов - использовать класс Canvas.Canvas вместе с классом Paint определяет способ наложения растровых изображений.

Следующий код продемонстрирует наложение нескольких растровых изображений в один файл изображения.

try {
        // String mFilePath  : Absolute Path of the file to be saved 

        // Bitmap mBitmap1   : First bitmap. This goes as background.
        // Bitmap mCBitmap   : Bitmap associated with the Canvas. All draws on the canvas are drawn into this bitmap.
        // Bitmap mBitmap2   : Second bitmap. This goes on top of first (in this example serves as foreground.

        // Paint mPaint1     : Paint to draw first bitmap
        // Paint mPaint2     : Paint to draw second bitmap on top of first bitmap

        Bitmap mCBitmap = Bitmap.createBitmap(mBitmap1.getWidth(), mBitmap1.getHeight(), mBitmap1.getConfig());

        Canvas tCanvas = new Canvas(mCBitmap);

        tCanvas.drawBitmap(mBitmap1, 0, 0, mPaint1);

        mPaint2.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN));
        // XFer modes define the overlay characteristic

        tCanvas.drawBitmap(mBitmap2, 0, 0, mPaint2);

        FileOutputStream stream = new FileOutputStream(mFilePath);
        mCBitmap.compress(CompressFormat.JPEG, 100, stream);

        stream.flush();
        stream.close();
    } catch(Exception e) {
        Log.e("Could not save", e.toString());
}

Шаш

1 голос
/ 04 сентября 2011

Вы можете попробовать следующее. Если вы можете нарисовать изображения на холсте:

Bitmap bitmap = new Bitmap(// Set the params you like //);
Canvas canvas = new Canvas(bitmap);

canvas.drawBitmap(// The first picture //);
canvas.drawBitmap(// First overlay //);
canvas.drawBitmap(// Second overlay //);
// You can draw whatever you like
// For example:
canvas.drawRectangle(...);

// Now the bitmap can will hold everything you draw on the canvas.
// You can save the bitmap to the SD
bitmap.compress(...);
0 голосов
/ 04 сентября 2011

Вы можете использовать Bitma.compress (..) с FileOutputStream в качестве последнего аргумента.

Прочтите о внешнем хранилище для получения инструкций по записи на SD-карту.

...