1

我正在使用 DrawingCache 但它给了我 NullPointerException

我的代码如下:

    myImageView.setDrawingCacheEnabled(true);

    myImageView.buildDrawingCache();
    resized = myImageView.getDrawingCache();        
    btnSave.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            String save_location = Environment
                    .getExternalStorageDirectory().getAbsolutePath()
                    + "/EditedImage";
            File dir = new File(save_location);
            if (!dir.exists())
                dir.mkdirs();
            File f = new File(dir, TEMP_PHOTO_FILE);
            FileOutputStream out;
            try {
                out = new FileOutputStream(f);
                resized.compress(Bitmap.CompressFormat.PNG, 90, out);

                out.flush();
                out.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });

错误出现在 onClick 上。

我的 logcat 是 在此处输入图像描述 什么?

4

2 回答 2

1

试试这个例子:

myImageView.setDrawingCacheEnabled(true);

myImageView.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
myImageView.layout(0, 0, v.getMeasuredWidth(), myImageView.getMeasuredHeight()); 

myImageView.buildDrawingCache(true);


Bitmap b = Bitmap.createBitmap(myImageView.getDrawingCache());
myImageView.setDrawingCacheEnabled(false); // clear drawing cache

更新:

另一种方式,您可以为位图创建一个画布,然后调用 view.draw(canvas) ,如:

 public static Bitmap loadBitmapFromView(View v) {
         Bitmap b = Bitmap.createBitmap( v.getLayoutParams().width, v.getLayoutParams().height,              Bitmap.Config.ARGB_8888);                


         Canvas c = new Canvas(b);
         v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
         v.draw(c);
         return b;
    }
于 2013-01-07T09:20:39.837 回答
0

每个视图在绘制到屏幕上之前都会经过一些过程,例如测量和布局。因此,当您在 Activity.onCreate() 中调用 getDrawingCache() 时,尚未绘制视图。

将以下两行放入您的 onclick 方法中。

myImageView.buildDrawingCache();
resized = myImageView.getDrawingCache();
于 2013-01-07T09:43:06.683 回答