在adb shell中,屏幕封盖-h告诉我:
usage: screencap [-hp] [-d display-id] [FILENAME]
-h: this message
-p: save the file as a png.
-d: specify the display id to capture, default 0.
If FILENAME ends with .png it will be saved as a png.
If FILENAME is not given, the results will be printed to stdout.
它没有指示捕获的屏幕是什么类型的文件。
首先,您发布的消息确实表明了格式的一些问题:您可以使用-p
标志获得PNG文件。
你可以在这里找到屏幕截图的来源。显然,screencap
以原始格式保存数据(除非您告诉它将其保存为PNG)。
您可以在源代码中找到有关该格式的更多信息:
-
它似乎以一个12字节的头开始:
- 宽度(4字节)
- 高度(4字节)
-
像素格式(4字节)。可用的格式列在这个文件中:
PIXEL_FORMAT_RGBA_8888 = HAL_PIXEL_FORMAT_RGBA_8888,//4x8位RGBAPIXEL_FORMAT_RGBX_8888 = HAL_PIXEL_FORMAT_RGBX_8888,//4x8位RGB0PIXEL_FORMAT_RGB_888 = HAL_PIXEL_FORMAT_RGB_888,//3x8-bit RGBPIXEL_FORMAT_RGB_565 = HAL_PIXEL_FORMAT_RGB_565,//16位RGBPIXEL_FORMAT_BGRA_8888 = HAL_PIXEL_FORMAT_BGRA_8888,//4x8位BGRAPIXEL_FORMAT_RGBA_5551 = HAL_PIXEL_FORMAT_RGBA_5551,//16位ARGBPIXEL_FORMAT_RGBA_4444 = HAL_PIXEL_FORMAT_RGBA_4444,//16位ARGBPIXEL_FORMAT_A_8 = 8,//8位A
- 文件的主要部分基本上是图像在内存中的表示。该部件的大小为
width * height * bytesPerPixel(pixelFormat)
字节。图像逐行保存,因此给定屏幕位置的像素数据从偏移量(y * width + x) * bytesPerPixel(pixelFormat)
开始。
大多数像素格式应该非常容易解码。其他用户则认为屏幕缓冲区始终为PIXEL_FORMAT_RGBA_8888
。查看链接问题的答案,了解如何将其转换为文件-或者仅使用-p
选项!