Как нарисовать на изображении и сохранить это изображение в Android? - PullRequest
2 голосов
/ 08 ноября 2011

Я новичок в холсте.Я хочу использовать Мое уже сохраненное изображение и хочу, чтобы на этом изображении было немного краски.после этого я хочу сохранить его.

Я знаю, что с помощью Canvas это возможно.Я могу рисовать на изображении, но пока я собираюсь сохранить это изображение, оно только сохранило картину.Не Изображение с рисунком.

Так может ли кто-нибудь сказать мне код того, как рисовать на изображении и сохранить это изображение?

Спасибо.

Вот мой Код, который используется длярисовать на SurfaceView.Исходный код:

    @Override
        public void run() {
            //Canvas canvas = null;
            while (_run){

                try{
                    canvas = mSurfaceHolder.lockCanvas(null);
                    if(mBitmap == null){
                        mBitmap =  Bitmap.createBitmap (1, 1, Bitmap.Config.ARGB_8888);
                    }

                    final Canvas c = new Canvas (mBitmap);
                    //canvas.drawColor(0, PorterDuff.Mode.CLEAR);
                    c.drawColor(0, PorterDuff.Mode.CLEAR);
                    canvas.drawColor(Color.WHITE); 
//                  Bitmap kangoo = BitmapFactory.decodeResource(getResources(),R.drawable.icon);

//                    if(!(DrawingActivity.imagePath==null)){
//                      canvas.drawBitmap(DrawingActivity.mBitmap, 0, 0, null);
//                    }
                    commandManager.executeAll(c);
                    canvas.drawBitmap (mBitmap, 0,  0,null);
                } finally {

                    mSurfaceHolder.unlockCanvasAndPost(canvas);
                }
            }

        }

Я использую mBitmap для сохранения растрового изображения на SDCard.

1 Ответ

1 голос
/ 08 ноября 2011

Ваша проблема в том, что вы снова и снова рисуете на всем своем холсте:

 final Canvas c = new Canvas (mBitmap); // creates a new canvas with your image is painted background
 c.drawColor(0, PorterDuff.Mode.CLEAR); // this makes your whole Canvas transparent
 canvas.drawColor(Color.WHITE);  // this makes it all white on another canvas
 canvas.drawBitmap (mBitmap, 0,  0,null); // this draws your bitmap on another canvas

Используйте логику примерно так:

@Override
public void run() {

Canvas c = new Canvas(mBitmap);


/* Paint your things here, example: c.drawLine()... Beware c.drawColor will fill your canvas, so your bitmap will be cleared!!!*/
...

/* Now mBitmap will have both the original image & your painting */
String path = Environment.getExternalStorageDirectory().toString(); // this is the sd card
OutputStream fOut = null;
File file = new File(path, "MyImage.jpg");
fOut = new FileOutputStream(file);
mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
fOut.flush();
fOut.close();
}

Также не забудьте добавить необходимые разрешения длясохраните ваш файл:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

за пределами <application></application> в файле манифеста.

...