找回密码
 注册
搜索
查看: 2335|回复: 6

[讨论] MTK上怎样把当前屏幕数据保存成BMP图片???

[复制链接]
发表于 2011-12-14 13:26:52 | 显示全部楼层 |阅读模式
怎样将当前屏幕显示的数据保存成BMP格式的图片,以此来实现抓屏功能???我目前做了一个应用就是直接把gdi_act_layer->buf_ptr这个buffer里的数据保存成bmp格式的图片发现图片怎么就是一张全红的根本不是屏幕显示的样子,所以gdi_act_layer->buf_ptr这个里面的数据是不是要做什么处理转成8位的bmp格式的图片数据。希望有哪位高人提点下啊~~~~
 楼主| 发表于 2011-12-15 17:32:45 | 显示全部楼层
仔细研究了下,大概能够理解了。
点评回复

使用道具 举报

发表于 2011-12-15 16:10:54 | 显示全部楼层
你可以理解成一个百位数 R 是百位 G是十位 B是个位  它们组成一个唯一的一个三位数,同样道理,颜色也是,只是是二进制的,不用去深入追究了,毕竟不是做图形算法的。
点评回复

使用道具 举报

 楼主| 发表于 2011-12-15 14:56:24 | 显示全部楼层
来继续讨论下。
我看工程源码里对layer_buffer里的每个像素(即每两个字节)转成R,G,B分别用1个字节表示的转换过程如下:
    int t;
    t = ((U32) (((c) & 0xf800) >> 8));
    *R = t | (t>>5);
   
    t = ((U32) (((c) & 0x07e0) >> 3));
    *G = t | (t>>6);

    t = ((U32) (((c) & 0x001f) << 3));
    *B = t | (t>>5);
我想知道这几个右移左移的参量是什么意思,为什么高5位右移8位,中6位右移3位,低5位又左移3位?[em13]
点评回复

使用道具 举报

 楼主| 发表于 2011-12-14 18:49:26 | 显示全部楼层
谢谢楼上的。原来都有源码呢。不过有谁对16位色的565格式的BMP图片里每个像素值(即读出来的两个字节数)还原成R,G,B的算法比较熟,来解释下呢?!
点评回复

使用道具 举报

发表于 2011-12-14 15:32:52 | 显示全部楼层
gdi_layer_save_bmp_file[em02]
点评回复

使用道具 举报

 楼主| 发表于 2011-12-14 14:00:45 | 显示全部楼层
因为我用的这个平台屏幕上每个像素是用两个字节表示的,所以我将gdi_act_layer->buf_ptr数据写入文件后将文件头里的8位色深改为16位色深的BMP图片,然后打开图片后可以看到屏幕上显示的了,但是发现图片和屏幕的显示是反倒过来了的,而且颜色也不对了,不知道这是怎么回事了?
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-12-25 09:47 , Processed in 0.047694 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表