首页
社区
课程
招聘
256色图像显示步骤求助
发表于: 2010-8-20 15:40 4838

256色图像显示步骤求助

2010-8-20 15:40
4838
这个文件本身并不是标准的256色格式,而是像素数据(索引值)和调色板分开的;图片大小(举例为40H,50H)已经知道了;
现在要把它读入并且显示
想实现的方法是:

szpalHead  dd   01000300H   ;(构造调色板结构头部version和n)
szBufferpal dd 256 dup(?)      ;(n数)
;构建一个00010003(word 100,word 300)开头的pal结构用来creatpal
1、 在建立窗口前,先打开文件,然后把调色板文件读到szBufferpal
把像素数据读入到xxxxbuffer
2、创建窗口以及相关处理
3、WM_PAINT消息中创建调色板并且显示图像:
这个时候有问题了;

....
local        @stPs:PAINTSTRUCT
....
invoke        BeginPaint,hWnd,addr @stPs
mov        @hDc,eax
invoke        CreateCompatibleDC,@hDc
mov        @hBmp,eax
invoke        CreatePalette,offset szBuffer
invoke        SelectPalette,eax,@hBmp,NULL
invoke        RealizePalette,@hBmp
....问题是,像素数据怎么处理呢?BitBlt的第5个参数是数据的handle
这几个之间是怎么协调一致的呢?
invoke        BitBlt,@hDc,0,0,40H,50H,esi,0,0,SRCCOPY
invoke        EndPaint,hWnd,addr @stPs

没搞过类似处理,请教。
还是说,直接alloc一个相当的内存区域,然后按照bmp256色文件格式把文件头
和调色板和数据写进去,然后把这个内存区域当做一个位图显示出来?
那该怎么把它当做位图呢?用什么函数?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 998
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
Please see CreateDIBSection()
2010-8-20 23:51
0
雪    币: 87
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
一语点醒梦中人呀
不过:
CreateDIBSection
iUsage:指定由pbmi参数指定的BITMAPINFO结构中的成员bmiColors数组包含的数据类型(要么是逻辑调色板索引值,要么是原文的RGB值)。

下列值是系统定义的,其含义为:   

DIB_PAL_COLORS:表示成员bmiColors是hdc指定的设备环境的逻辑调色板,使用的是16位索引值数组。   

DIB_RGB_COLORS:表示结构BITMAPINFO中包含了RGB值的数组。

这个是搜来的说明,奇怪的是这个参数必需设置为DIB_RGB_COLORS
无论是256色还是没有调色板的图片,感觉有调色板的图明明应该是DIB_PAL_COLORS的啊
但颜色就是不对
CreateDIBSection之后直接SetDIBitsToDevice,连select pal和realize pal都不用了,奇怪。
直接就能显示图像了。
2010-8-22 12:53
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
256色的BMP也叫8为深元位图,也就是说是0-255共256种颜色(即一个字节表示一个点)。

而在BMP实际数据前有一个条色版信息(他就是RGB的形式表示),你要显示256色BMP图片,就必须先将这个调色板信息给填入相信的显存区

当在高色深下,比如伪真彩16色深模式下共0-65535重颜色,那么这种BMP就没所谓条色板了,他的数据区就是你说的RGB形式表示,而这个也是有多种组合,比如5:6:5,即R占5位,G占6位;B占5位

关于256色的显示你可以在论坛中看看JS256图形包,里面有关于256色图片显示的最简化的源码,相信对你有帮助
2010-8-24 16:38
0
雪    币: 87
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
JS256图形包?论坛里没搜索到啊
我的意思是说,明明是256色索引(PALETTE)模式,CreateDIBSection的参数却必须设置为DIB_RGB_COLORS
2010-8-24 23:42
0
游客
登录 | 注册 方可回帖
返回
//