不压缩的情况,即 @/( 为 %3E#$% 的情况。
biSizeImage 指定实际的位图数据占用的字节数,其实也可以从以下的公式中计算出来:
(3.(*?F11(.?
要注意的是:上述公式中的 ?F必须是 的整倍数所以不是 ?,而是 ?F,表示大于或等于 ? 的,最
接近 的整倍数。举个例子,如果 ?*",则 ?F*";如果 ?*"!,?F*"。如果 @/(
为 %3E#$%,则该项可能为零
biXPelsPerMeter 指定目标设备的水平分辨率,单位是每米的象素个数,关于分辨率的概念,我们将在第 章详细介绍。
biYPelsPerMeter 指定目标设备的垂直分辨率,单位同上。
biClrUsed 指定本图象实际用到的颜色数,如果该值为零,则用到的颜色数为 "
%@0
。
biClrImportant 指定本图象中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的。
第三部分为调色板 Palette,当然,这里是对那些需要调色板的位图文件而言的。有些位图,如真彩色图,是不需要调色板
的,%345637959# 后直接是位图数据。调色板实际上是一个数组,共有 @2/C( 个元素如果该值为零,则有
"
%@0
个元素。数组中每个元素的类型是一个 #$%GC5 结构,占 个字节,其定义如下:
'((-1/0,1.#$%GC51:1
%B9;;;1/.%20(<1++该颜色的蓝色分量
%B9;;;1/.$/((<1++该颜色的绿色分量
%B9;;;1/.#(<1++该颜色的红色分量
%B9;;;1/.#((/=(<1++保留值
>1#$%GC5<1
第四部分就是实际的图象数据了。对于用到调色板的位图,图象数据就是该象素颜在调色板中的索引值。对于真彩色图,
图象数据就是实际的 #、$、% 值。下面针对 " 色、! 色、" 色位图和真彩色位图分别介绍。
对于 " 色位图,用 ! 位就可以表示该象素的颜色一般 表示黑,! 表示白,所以一个字节可以表示 个象素。
对于 ! 色位图,用 位可以表示一个象素的颜色,所以一个字节可以表示 " 个象素。
对于 " 色位图,一个字节刚好可以表示 ! 个象素。
对于真彩色图,三个字节才能表示 ! 个象素,哇,好费空间呀!没办法,谁叫你想让图的颜色显得更亮丽呢,有得必有失
嘛。
要注意两点:
!;;;1每一行的字节数必须是 的整倍数,如果不是,则需要补齐。见前面介绍 (3.(。
";;;1一般来说,46 文件的数据从下到上,从左到右的。也就是说,从文件中最先读到的是图象最下面一行的左边第一
个象素,然后是左边第二个象素……接下来是倒数第二行左边第一个象素,左边第二个象素……依次类推1,最后得到的是
最上面一行的最右一个象素。
1.3 显示一个 bmp 文件的 C 程序
下面的函数 LoadBmpFile,其功能是从一个 文件中读取数据包括 %345637959#,调色板和实际图象数
据,将其存储在一个全局内存句柄 ?3. 中,这个 ?3. 将在以后的图象处理程序中用到。同时填写一个类型为
%3456 的全局变量 ?% 和一个类型为 65899 的全局变量 ?62((。这两个变量将在处理 4E653 消息时用
到,用来显示位图。该函数的两个参数分别是用来显示位图的窗口句柄,和 文件名全路径。当函数成功时,返回
#C9,否则返回 7589。
%34567389959#;1-<
%345637959#1<
%818%72(11?D,?/1H%72((
:;;1
7389;;;;;;;;;;;;1;;;;;;;;1?-<1++文件句柄
++指向 %345637959# 结构的指针
86%345637959#;;;123.<1
8$65899;;;;;;;;;;;;;;;;;;;1;;;;;;1H62<1++指向逻辑调色板结构的指针
评论6
最新资源