Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过命令行拍摄的Android屏幕快照的图像格式_Android_Linux_Image_Image Processing_Android Ndk - Fatal编程技术网

通过命令行拍摄的Android屏幕快照的图像格式

通过命令行拍摄的Android屏幕快照的图像格式,android,linux,image,image-processing,android-ndk,Android,Linux,Image,Image Processing,Android Ndk,最近,我找到了一种通过adb shell命令行将数据显示到帧缓冲区的方法。为了从帧缓冲区获取数据,我使用了以下命令: cat/dev/graphics/fb0>/sdcard/screenshot 现在,在我的/SD卡中,我得到了一张原始图像截图。为了在作为设备屏幕的帧缓冲区上显示此内容,我使用了以下命令: cat/sdcard/screenshot>/dev/graphics/fb0 作为一个输出,我可以在我的设备屏幕上看到屏幕截图注意:我的设备是根设备,因此我可以访问/dev/graphic

最近,我找到了一种通过adb shell命令行将数据显示到帧缓冲区的方法。为了从帧缓冲区获取数据,我使用了以下命令:

cat/dev/graphics/fb0>/sdcard/screenshot

现在,在我的/SD卡中,我得到了一张原始图像截图。为了在作为设备屏幕的帧缓冲区上显示此内容,我使用了以下命令:

cat/sdcard/screenshot>/dev/graphics/fb0

作为一个输出,我可以在我的设备屏幕上看到屏幕截图注意:我的设备是根设备,因此我可以访问/dev/graphics/fb0

现在我的问题是:我必须从命令行在屏幕上显示RGB888格式的图像。所以我试着:

cat/sdcard/rgbimg>/dev/graphics/fb0

但作为屏幕上的输出,我可以看到一个白色和黑色的圆点,而不是图像

因此,为了在帧缓冲区上显示我的RGB888,我需要将其转换为文件屏幕快照的格式。因此,如果有人尝试过,你能告诉我上面例子中图像截图的格式吗


任何关于如何获得此格式的建议也将不胜感激。提前感谢。

鉴于默认相机输出格式是NV21,我想它可能是用于显示的格式。从相机输出一种可以按原样显示的格式似乎是合乎逻辑的

如果这有什么帮助的话,下面列出了Android支持的各种图像格式,您正在寻找的格式可能就是其中之一。例如,可以找到这些格式的实现细节


希望这能有所帮助。

鉴于默认相机输出格式是NV21,我想它可能是用于显示的格式,从相机输出一种可以按原样显示的格式似乎是合乎逻辑的

如果这有什么帮助的话,下面列出了Android支持的各种图像格式,您正在寻找的格式可能就是其中之一。例如,可以找到这些格式的实现细节


希望这有帮助。

屏幕上的图像可能是32 bpp。只需检查捕获图像的文件大小并将其除以宽度*高度。这会告诉你一个像素使用了多少字节

如果是4字节,则需要将RGB888图像转换为ARGB或RGBA。alpha字节位置的Afaik差异取决于显示硬件,而不是Android

是做这类工作的工具。例如,可以通过以下方式将RGBA图像转换为png:

更具体的例子是

convert -size 680x1209 -depth 8 phone_decor.rgba phone_decor.png
因为图像的原始数据不包括宽度、高度和深度信息,所以需要提供这些信息


请参阅以了解有关图像转换选项的更多信息,我承认这不是我见过的最好的手册。

屏幕上的图像可能是32 bpp。只需检查捕获图像的文件大小并将其除以宽度*高度。这会告诉你一个像素使用了多少字节

如果是4字节,则需要将RGB888图像转换为ARGB或RGBA。alpha字节位置的Afaik差异取决于显示硬件,而不是Android

是做这类工作的工具。例如,可以通过以下方式将RGBA图像转换为png:

更具体的例子是

convert -size 680x1209 -depth 8 phone_decor.rgba phone_decor.png
因为图像的原始数据不包括宽度、高度和深度信息,所以需要提供这些信息


请参阅以了解有关图像转换选项的更多信息,我承认这不是我见过的最好的手册。

这取决于设备,但很可能您需要RGBA。从帧缓冲区获得的原始图像还包含多个副本,您可以通过检查文件大小来计算副本的数量

您可以尝试使用此脚本在fb.raw中生成带有颜色条的图像,然后您可以复制到/dev/graphics/fb0将W、H和c适配到硬件:

#! /usr/bin/env python

W=480
H=800

# R G B
COLORS = [
    "\xff\x00\x00",
    "\x00\xff\x00",
    "\x00\x00\xff",
    "\xff\xff\x00",
    "\x00\xff\xff",
    "\xff\x00\xff",
    ]
ALPHA = "\xff"
BLACK = "\x00\x00\x00\xff"
N = len(COLORS)

def color(x):
    for i in range(N):
        if x <= (i+1)*W/N:
            return COLORS[i]

f = open('fb.raw', 'wb')

for c in range(2):
    for y in range(H):
        if c == 0:
            for x in range(W):
                f.write(color(x)+ALPHA)
        else:
             f.write(BLACK)

f.close()

这取决于设备,但很可能您需要RGBA。从帧缓冲区获得的原始图像还包含多个副本,您可以通过检查文件大小来计算副本的数量

您可以尝试使用此脚本在fb.raw中生成带有颜色条的图像,然后您可以复制到/dev/graphics/fb0将W、H和c适配到硬件:

#! /usr/bin/env python

W=480
H=800

# R G B
COLORS = [
    "\xff\x00\x00",
    "\x00\xff\x00",
    "\x00\x00\xff",
    "\xff\xff\x00",
    "\x00\xff\xff",
    "\xff\x00\xff",
    ]
ALPHA = "\xff"
BLACK = "\x00\x00\x00\xff"
N = len(COLORS)

def color(x):
    for i in range(N):
        if x <= (i+1)*W/N:
            return COLORS[i]

f = open('fb.raw', 'wb')

for c in range(2):
    for y in range(H):
        if c == 0:
            for x in range(W):
                f.write(color(x)+ALPHA)
        else:
             f.write(BLACK)

f.close()
cat/dev/graphics/fb0>/sdcard/screenshot

该命令生成了一个文件,它是RGBA,红-绿-蓝-alpha。至少我假设它是一个alpha通道,我得到的每个字节在第四个字节的位置都有一个FF

我能够在photoshop中使用raw file open 4通道544x1920交错打开原始文件,其中显示屏幕的两个副本,一个在另一个之上。我不知道为什么会有两份,也许是双缓冲区?可能是内部/外部视频

要将原始文件视为RGB,我将黄色通道复制为红色,绿色通道复制为绿色,青色通道复制为蓝色通道,图像看起来就像从DDMS屏幕捕获按钮捕获的图像,只是有一堆2个图像,而不是仅打开 e

cat/dev/graphics/fb0>/sdcard/screenshot

该命令生成了一个文件,它是RGBA,红-绿-蓝-alpha。至少我假设它是一个alpha通道,我得到的每个字节在第四个字节的位置都有一个FF

我能够在photoshop中使用raw file open 4通道544x1920交错打开原始文件,其中显示屏幕的两个副本,一个在另一个之上。我不知道为什么会有两份,也许是双缓冲区?可能是内部/外部视频


要将原始文件视为RGB,我将黄色通道复制为红色,绿色通道复制为绿色,青色通道复制为蓝色通道,图像看起来与从DDMS屏幕捕获按钮捕获的图像一样,只是有一个由2个图像组成的堆栈,而不是一个图像

谢谢你的回复+感谢你的努力。我认为这是python脚本。我会试试..帧缓冲区的副本,或者双帧缓冲区,通常是2。嘿,谢谢。。。好像你的代码起作用了。。。只是想确认输出是否为彩色条????同样在linux中,如果我想查看这个生成的fb.raw,那么我应该使用哪个工具?你能告诉我吗。RGBA中A的值是多少。它是所有α的常数还是变化的??请帮助输出应该是垂直的酒吧,如果一切顺利。ALPHA是透明的,您可以设置\x00到\xff之间的任何值。谢谢您的回复+感谢你的努力。我认为这是python脚本。我会试试..帧缓冲区的副本,或者双帧缓冲区,通常是2。嘿,谢谢。。。好像你的代码起作用了。。。只是想确认输出是否为彩色条????同样在linux中,如果我想查看这个生成的fb.raw,那么我应该使用哪个工具?你能告诉我吗。RGBA中A的值是多少。它是所有α的常数还是变化的??请帮助输出应该是垂直的酒吧,如果一切顺利。ALPHA是透明度,您可以设置\x00到\xff之间的任何值。