我正在使用以下代码以编程方式截取屏幕截图:
public static Bitmap takeScreenshot(View view)
{
try
{
// create bitmap screen capture
view.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);
return bitmap;
}
catch (Throwable e)
{
CustomLogHandler.printError(e);
}
return null;
}
private static void copyFile(Bitmap bitmap)
{
File dstFile = getShareResultFile();
//Delete old file if exist.
if(dstFile.exists()) {
dstFile.delete();
}
FileOutputStream fos = null;
try
{
fos = new FileOutputStream(dstFile);
bitmap.compress(Bitmap.CompressFormat.JPEG, 0, fos);
fos.flush();
}
catch (Exception e) {
CustomLogHandler.printError(e);
}
finally {
if (fos != null) {
try {
fos.close();
} catch (IOException ioe) {
CustomLogHandler.printError(ioe);
}
}
}
}
有几个问题,如:
我正在从根 View 截取屏幕截图。
最佳答案
bitmap.compress(Bitmap.CompressFormat.JPEG, 0, fos);
首先,您将其保存为 JPEG。 JPEG 专为照片而设计,您的屏幕截图不是照片。
其次,您使用质量因子 0 保存它。JPEG 使用有损压缩算法,质量因子 0 表示“请随意使该图像非常差,但尽可能压缩它”。
我建议切换到:
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
PNG 是一种更好的图像格式,可用于截取您的问题中显示的内容。我不认为 PNG 使用质量因子值;我输入 100 只是为了表明您想要最好的质量。
关于android - 在android中以编程方式截取屏幕截图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55829773/