在后台服务中截取屏幕截图
Taking screenshot in a Background Service
我正在尝试制作一个可以截取其他应用程序屏幕截图的泡泡应用程序。
我发现这个项目 link 有媒体投影样本,但图像没有保存到设备。
有什么方法可以将这张图片保存到设备上,或者有什么其他方法可以在后台服务中使用我的应用截取屏幕截图。
我已经检查了 link,我认为有一种方法可以保存从屏幕截图中截取的文件。
来自 ImageTransmogrifier
class
@Override
public void onImageAvailable(ImageReader reader) {
final Image image=imageReader.acquireLatestImage();
if (image!=null) {
Image.Plane[] planes=image.getPlanes();
ByteBuffer buffer=planes[0].getBuffer();
int pixelStride=planes[0].getPixelStride();
int rowStride=planes[0].getRowStride();
int rowPadding=rowStride - pixelStride * width;
int bitmapWidth=width + rowPadding / pixelStride;
if (latestBitmap == null ||
latestBitmap.getWidth() != bitmapWidth ||
latestBitmap.getHeight() != height) {
if (latestBitmap != null) {
latestBitmap.recycle();
}
latestBitmap=Bitmap.createBitmap(bitmapWidth,
height, Bitmap.Config.ARGB_8888);
}
latestBitmap.copyPixelsFromBuffer(buffer);
image.close();
ByteArrayOutputStream baos=new ByteArrayOutputStream();
Bitmap cropped=Bitmap.createBitmap(latestBitmap, 0, 0,
width, height);
cropped.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] newPng=baos.toByteArray();
svc.processImage(newPng);
}
}
您可以注意到那里有一个 latestBitmap
对象,从这里您实际上可以将此位图保存到您想要保存的任何位置。
例如您可以参考此 link https://www.simplifiedcoding.net/android-save-bitmap-to-gallery/ 将其保存在您的图库中:)
我正在尝试制作一个可以截取其他应用程序屏幕截图的泡泡应用程序。
我发现这个项目 link 有媒体投影样本,但图像没有保存到设备。
有什么方法可以将这张图片保存到设备上,或者有什么其他方法可以在后台服务中使用我的应用截取屏幕截图。
我已经检查了 link,我认为有一种方法可以保存从屏幕截图中截取的文件。
来自 ImageTransmogrifier
class
@Override
public void onImageAvailable(ImageReader reader) {
final Image image=imageReader.acquireLatestImage();
if (image!=null) {
Image.Plane[] planes=image.getPlanes();
ByteBuffer buffer=planes[0].getBuffer();
int pixelStride=planes[0].getPixelStride();
int rowStride=planes[0].getRowStride();
int rowPadding=rowStride - pixelStride * width;
int bitmapWidth=width + rowPadding / pixelStride;
if (latestBitmap == null ||
latestBitmap.getWidth() != bitmapWidth ||
latestBitmap.getHeight() != height) {
if (latestBitmap != null) {
latestBitmap.recycle();
}
latestBitmap=Bitmap.createBitmap(bitmapWidth,
height, Bitmap.Config.ARGB_8888);
}
latestBitmap.copyPixelsFromBuffer(buffer);
image.close();
ByteArrayOutputStream baos=new ByteArrayOutputStream();
Bitmap cropped=Bitmap.createBitmap(latestBitmap, 0, 0,
width, height);
cropped.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] newPng=baos.toByteArray();
svc.processImage(newPng);
}
}
您可以注意到那里有一个 latestBitmap
对象,从这里您实际上可以将此位图保存到您想要保存的任何位置。
例如您可以参考此 link https://www.simplifiedcoding.net/android-save-bitmap-to-gallery/ 将其保存在您的图库中:)