这个文件本身并不是标准的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期)