如果我发出'adb shell screencap /storage/sdcard/file。结果是什么类型的文件?

If I issue 'adb shell screencap /storage/sdcard/file. What type of file the result is?

在 adb shell 中,screencap -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 文件。

你找到截图的来源here。显然,screencap 以原始格式保存数据(除非你告诉它保存为 PNG)。

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

  1. 好像是12字节的header开头:

    1. 宽度(4 字节)
    2. 高度(4 字节)
    3. 像素格式(4 字节)。列出了可用的格式 in this file:

      PIXEL_FORMAT_RGBA_8888 = HAL_PIXEL_FORMAT_RGBA_8888, // 4x8 位 RGBA PIXEL_FORMAT_RGBX_8888 = HAL_PIXEL_FORMAT_RGBX_8888, // 4x8 位 RGB0 PIXEL_FORMAT_RGB_888 = HAL_PIXEL_FORMAT_RGB_888, // 3x8 位 RGB PIXEL_FORMAT_RGB_565 = HAL_PIXEL_FORMAT_RGB_565, // 16 位 RGB PIXEL_FORMAT_BGRA_8888 = HAL_PIXEL_FORMAT_BGRA_8888, // 4x8 位 BGRA PIXEL_FORMAT_RGBA_5551 = HAL_PIXEL_FORMAT_RGBA_5551, // 16 位 ARGB PIXEL_FORMAT_RGBA_4444 = HAL_PIXEL_FORMAT_RGBA_4444, // 16 位 ARGB PIXEL_FORMAT_A_8 = 8, // 8 位 A

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

大多数像素格式应该很容易解码。 Other users assume 屏幕缓冲区将始终为 PIXEL_FORMAT_RGBA_8888。查看链接问题的答案以获取有关如何将其转换为文件的说明 - 或者仅使用 -p 选项!