我使用以下代码截取我的布局:
View u = findViewById(R.id.mainL);
u.setDrawingCacheEnabled(true);
LinearLayout z = (LinearLayout) findViewById(R.id.mainL);
int totalHeight = z.getHeight();
int totalWidth = z.getWidth();
u.layout(0, 0, totalWidth, totalHeight);
u.buildDrawingCache(true);
Bitmap b = Bitmap.createBitmap(u.getDrawingCache());
u.setDrawingCacheEnabled(false);
显然我没有做任何关于质量的事情,但结果位图(这是一个jpeg图像)的质量非常糟糕。
我做错了什么? 我应该把它改成PNG图像以换取更好的质量,但我不知道如何。 感谢。修改
对于那些问我在哪里保存位图的人我不得不说我根本就没有保存它。我只是用这段代码分享:
String pathofBmp = MediaStore.Images.Media.insertImage(getContentResolver(), b , "title", null);
Uri bmpUri = Uri.parse(pathofBmp);
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("image/jpeg");
shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri);
shareIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(Intent.createChooser(shareIntent, "Share"));
答案 0 :(得分:3)
我必须说我根本没有保存它
是的,你是。否则,您将没有pathofBmp
。现在,在您的情况下,您将委托将位图保存到MediaStore
的所有内容。我从未使用insertImage()
,我不知道它在文件格式,质量百分比等方面做了什么。
如果您想要更好地控制保存图像,use compress()
on Bitmap
可以自己将其写入文件。
答案 1 :(得分:0)
请试试这个:
View v = view.getRootView();
v.setDrawingCacheEnabled(true);
Bitmap b = v.getDrawingCache();
String extr = Environment.getExternalStorageDirectory().toString();
File myPath = new File(extr, getString(R.string.free_tiket)+".jpg");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(myPath);
b.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
MediaStore.Images.Media.insertImage(getContentResolver(), b, "Screen", "screen");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我认为问题是压缩100是解决你的问题。