将画布转换为android中的位图图像

时间:2010-10-25 10:37:09

标签: android bitmap android-canvas

我正在尝试在画布上开发一个应用程序,我在画布上绘制一个位图。绘制后,我试图转换为位图图像。

任何人都可以给我一个建议。

提前谢谢。

4 个答案:

答案 0 :(得分:68)

建议取决于你想要做什么。

如果您担心控件需要很长时间才能绘制,并且您想要绘制位图以便您可以通过blit重新绘制位图而不是通过画布重新绘制,那么不会想要双重猜测平台 - 控件自动将其绘图缓存到临时位图,甚至可以使用getDrawingCache()

从控件中获取这些位图

如果要使用画布绘制位图,通常的配方是:

  1. 使用Bitmap.createBitmap()
  2. 创建正确大小的位图
  3. 使用Canvas(Bitmap)构造函数
  4. 创建指向此位图的画布实例
  5. 绘制到画布
  6. 使用位图

答案 1 :(得分:21)

所以你创建了一个新的Bitmap,例如:

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

widthheight与您的画布相同。

接下来,使用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 :(得分:2)

其他例子:

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; 
}

答案 3 :(得分:1)

以下是从画布转换为位图并将其存储到图库或特定文件夹的步骤。

注意:请确保您已获得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());