3

我正在使用getDrawingCache()方法捕获我的布局视图并从中创建图像。代码工作正常并且生成了图像,但这里的问题是,生成的图像质量非常低。我希望生成的图像的分辨率很高,这样每当我设置它时ImageView就不会被拉伸。

这是我正在使用的代码:

RelativeLayout layout = (RelativeLayout) findViewById(R.id.layout); layout.setDrawingCacheEnabled(true); Bitmap bmp = layout.getDrawingCache(); File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + System.currentTimeMillis()+".jpg"); try { FileOutputStream out = new FileOutputStream(f); bmp.compress(Bitmap.CompressFormat.JPEG, 100, out); out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); }

PS -我也尝试在调用之前使用layout.buildDrawingCache(true);and ,但没有发现质量变化。layout.setDrawingCacheQuality(RelativeLayout.DRAWING_CACHE_QUALITY_HIGH);layout.getDrawingCache();

谁能帮我解决这个问题,我怎样才能提高生成图像的质量?提前致谢。

4

1 回答 1

5

在搜索了很长时间并尝试了不同的解决方案之后,我终于得到了比以前更好的捕获图像质量。

我将代码更改为:

RelativeLayout layout = (RelativeLayout) findViewById(R.id.layout);
layout.setDrawingCacheEnabled(true);
layout.buildDrawingCache(true);
final Bitmap bmp = Bitmap.createBitmap(layout.getDrawingCache());
layout.setDrawingCacheEnabled(false);
Canvas c= new Canvas(bmp);


File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/" + System.currentTimeMillis()+".jpg");
try {

    FileOutputStream out = new FileOutputStream(f);
    c.drawBitmap(bmp, 0, 0, null);
    bmp.compress(Bitmap.CompressFormat.JPEG, 100, out);

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

这对我有帮助。希望它也能帮助其他人。

于 2014-04-18T07:20:18.097 回答