如果我发出'adb 外壳屏幕盖/存储/SD卡/文件。结果是什么类型的文件?



在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)。

您可以在源代码中找到有关该格式的更多信息:

  1. 它似乎以一个12字节的头开始:

    1. 宽度(4字节)
    2. 高度(4字节)
    3. 像素格式(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

  2. 文件的主要部分基本上是图像在内存中的表示。该部件的大小为width * height * bytesPerPixel(pixelFormat)字节。图像逐行保存,因此给定屏幕位置的像素数据从偏移量(y * width + x) * bytesPerPixel(pixelFormat)开始。

大多数像素格式应该非常容易解码。其他用户则认为屏幕缓冲区始终为PIXEL_FORMAT_RGBA_8888。查看链接问题的答案,了解如何将其转换为文件-或者仅使用-p选项!

最新更新