преобразование холста в растровое изображение в Android - PullRequest
46 голосов
/ 25 октября 2010

Я пытаюсь разработать приложение на холсте, я рисую растровое изображение на холсте. После рисования я пытаюсь преобразовать его в растровое изображение.

Может кто-нибудь дать мне предложение.

Заранее спасибо.

Ответы [ 4 ]

68 голосов
/ 25 октября 2010

Совет зависит от того, что вы пытаетесь сделать.

Если вы обеспокоены тем, что ваши элементы управления требуют много времени для рисования, и вы хотите нарисовать в растровое изображение, так что вы можете перетаскивать растровое изображение, а не повторно- используя холст, вы не хотите дважды угадывать платформу - элементы управления автоматически кэшируют свои рисунки во временные растровые изображения, и их можно даже извлечь из элемента управления с помощью getDrawingCache()

Если вы хотите рисовать с использованием холста в растровое изображение, обычный рецепт:

  1. Создайте растровое изображение правильного размера, используя Bitmap.createBitmap()
  2. Создание экземпляра холста, указывающего, что это растровое изображение, используя Canvas(Bitmap) конструктор
  3. Рисование на холст
  4. Использование растрового изображения
21 голосов
/ 11 июля 2012

Итак, вы создаете новый Bitmap, например:

Bitmap myBitmap = new Bitmap( (int)Width, (int)Height, Config.RGB_565 )

с width и height совпадают с вашим холстом.

Далее используйте canvas.setBitmap(myBitmap), но не drawBitmap().

После того, как вы позвоните setBitmap, все, что вы нарисуете на холсте, на самом деле будет рисоваться на вашем myBitmap, следуя примеру кода, который я иллюстрировал.

Редактировать

Вы не можете создать растровое изображение напрямую, например:

Bitmap myBitmap = new Bitmap( (int)Width, (int)Height, Config.RGB_565 );

Вы должны использовать вместо:

Bitmap myBitmap = Bitmap.createBitmap( (int)Width, (int)Height, Config.RGB_565 );
2 голосов
/ 19 февраля 2014

Другой пример:

public Bitmap getBitmapNews(int item , boolean selected, int numbernews){                   
        Bitmap bitmap;

        if(selected)
            bitmap=mBitmapDown[item].copy(Config.ARGB_8888, true);
        else 
            bitmap=mBitmapUp[item].copy(Config.ARGB_8888, true);

        Canvas canvas = new Canvas(bitmap);

        if(numbernews<10){
        canvas.drawBitmap(mNotiNews[numbernews],0,0,null);
        }else{
            canvas.drawBitmap(mNotiNews[0],0,0,null);
        }

 return bitmap; 
}
1 голос
/ 11 января 2017

Ниже приведены шаги для преобразования из холста в растровое изображение и сохранения его в галерее или определенной папке.

Примечание: убедитесь, что вы дали разрешение на WRITE_EXTERNAL_STORAGE

activity_main.xml

            <LinearLayout
                android:id="@+id/linearLayout"
                android:orientation="horizontal"
                android:layout_margin="10dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <DrawingView
                    android:id="@+id/drawingView"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>

            </LinearLayout>

MainActivity.java

  1. Создать ссылку на родительский макет

    LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
    
  2. Для хранения в галерее

    final String imagename = UUID.randomUUID().toString() + ".png";
    MediaStore.Images.Media.insertImage(getContentResolver(), linearLayout .getDrawingCache(), imagename, "drawing");
    
  3. Для преобразования в растровое изображение

    linearLayout.setDrawingCacheEnabled(true);
    linearLayout.buildDrawingCache();
    Bitmap bitmap = Bitmap.createBitmap(linearLayout.getDrawingCache());
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...