求位图分割、保存的思路和代码

daotong 2006-04-08 04:52:27
我把一个256色位图文件分割成几个部分,每一个部分的边界都已经确定,并且可以显示在屏幕上,但是我想把每个分割的图保存,却碰到了麻烦。主要是我对位图的了解不是太深入,现在8位位图和24位位图的象素存储和颜色等都还不是太明了,就是从网上找了些代码,自己添加的分割功能,然后保存分割后的图出现了麻烦。
还有就是如果24位的位图分割后如何存储,我没试过,但是想知道。分割前我是得到了每一个象素的数据,但是怎么把这些数据写入新的位图就不知道了,很多代码都是创建设备环境,直接全部写入,我是想用我感兴趣的象素数据写入新的位图文件。还有每行字节数被4整除我还不知道怎么处理,一个连续的缓冲区,不知道怎么处理单行(截取出的部分不是在连续的缓冲区)。

写了这么多,有点乱,也可能没人感兴趣,不过我希望有懂得的朋友帮个忙,把思路和算法说一下,我不想要些从别处随便抄来的代码,思路是最重要的。
...全文
461 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
狂放之歌 2006-04-09
  • 打赏
  • 举报
回复
如果有足够的 误差范围

可以先 bitblt到 一块 内存DC然后 分块(RECT)..在...
这个方法够呆吧~呵呵
xzxiao 2006-04-09
  • 打赏
  • 举报
回复
每行字节数必须是4的倍数:
int nWidth;//图像每行的像素数;
int nPixelByte;//每像素字节数,24位图像为3,32位图像为4。
int nLineByte = (nPixelByte*nWidth+3)/4*4;//每行字节数(4的倍数)
xhzxlqt 2006-04-09
  • 打赏
  • 举报
回复
未压缩的位图除去前面54个字节,如果没有调色板,后面的数据就像一个矩阵一样
(24位位图,RGB各占一个字节)
RGBRGBRGBRGBRGBRGB...
...
RGBRGBRGBRGBRGBRGB...
(8位,256色位图,一个像素一个字节表示其颜色)
16位位图比较复杂一点分两种情况556/565,一个像素还是3个字节,
32位位图与24位位图差不多,一个像素占4个字节,最后一个字节一般都为0
RGB0RGB0RGB0RGB0...
...
RGB0RGB0RGB0RGB0...


所以读出位图信息头之后就知道图像的宽和高,以及颜色位图格式(是多少位的),然后就根据这个知道了后面图像数据部分"矩形"的行列值(注意的是每行必需是4*N字节,不足补0)

分割时,重新构建新位图的信息头,可以直接从原"矩形"中读取就行了

位图信息头,C++(VC/BC)中都有现存的结构定义
xhzxlqt 2006-04-08
  • 打赏
  • 举报
回复
BMP文件格式分析
http://lhbyron.blogchina.com/652956.html
laofang 2006-04-08
  • 打赏
  • 举报
回复
一般用兼容位图就可完成你想做的事。
如果你要按所谓像素写入位图,你首先得熟悉位图格式才行,vckbase上有这方面的文章先看一下
MSDN3000 2006-04-08
  • 打赏
  • 举报
回复
分割后填充也就是一个简单的数据变换
MSDN3000 2006-04-08
  • 打赏
  • 举报
回复


用UltraEdit打开一个Bitmap文件,选择Hex方式查看:

A>. 前面的14个字节是头,前面10字节可以直接抄过来,不用变,但后面4个字节是描述图像内容的起始地址.
B>. 然后第15,16,17,18字节是Info段的长度,这段一般是40字节长,19,20,21,22是长,23,24,25,26是高,后面的是描述是否压缩啊什么的记不大清楚了.
C>. 如果是24bit图,每个点保存RGB共三个字节,32bit多一个alpha共4个字节.
如果保存8bit图,则在Info段后跟色表,注意A>里面的图像起始数据Address要后移
a>. 色表格式:BGRA0,BGRA1....BGRA255填充,每种颜色4个字节;
b>. 图像存储使用index,比如字节0代表色表内的BGRA0;
D>. 4Bit/2Bit色格式和C类似,不过每种颜色占4/2Bit;

另外:
对齐:在32bit系统内按照32bit对齐,每行数据不足4字节,补0x00;
压缩:bitmap一般很少压缩,压缩一般使用的runlength;

查查这方面的资料,网上不少.

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧