zoukankan      html  css  js  c++  java
  • 位图操作WIDTHBYTES

    一、定义

    #define WIDTHBYTES(bits) (((bits) + 31) / 32 *4);

    计算图像每行象素所占的字节数目,设置成4的整数倍

    //=(((bits) + 31) / 8)

    //=((( biWidth* biBitCount) + 31) /8)

    二、参数说明:

    bits:一个btmap中一行像素的位数总和。

     

    bits:=biWidth* biBitCount;

    biWidth:像素个数

    biBitCount:一个像素所占的位数

    当biBitCount=1时,8个像素占1个字节;

    当biBitCount=4时,2个像素占1个字节;

    当biBitCount=8时,1个像素占1个字节;

    当biBitCount=24时,1个像素占3个字节

    也就是一个像素占biBitCount/8个字节

    三、实例:

    对于2色图,如果图象宽是31,则每一行需要31位存储,合3个字节加7位,因为字节数必须是4的整倍数,所以应该是4,而此时的biWidth=31, biBitCount=1,WIDTHBYTES(31*1)=4,和我们设想的一样。

    举一个256色的例子,如果图象宽是31,则每一行需要31个字节存储,因为字节数必须是4的整倍数,所以应该是32,而此时的biWidth=31,biBitCount=8, WIDTHBYTES(31*8)=32。

    四、相关知识说明

    1.将图像文件宽度设置成4的整数倍,只有bmp格式要求采用,其他格式的图像并不要求是4的倍数。

    2.bmp格式采用这一做法,我想是为了考虑访问的速度。从文件读出图像数据时,一次读4个字节比一次读1个字节快。但如果图像文件不是4的倍数时,每行最后的像素就不可能[注]采用一次读4个字节(否则就会把下一行的像素也读出)。当然,你仍然可以读出的4字节来,但必须处理:将其中几个字节放在本行,而其余的显示到下一行.但显然这很不方便,要影响速度。

    3.位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是左到右,扫描行之间是从下到上。Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充

    转自http://blog.sina.com.cn/s/blog_472226a60100l5jf.html

  • 相关阅读:
    1052 Linked List Sorting (25 分)
    1051 Pop Sequence (25 分)
    1050 String Subtraction (20 分)
    1049 Counting Ones (30 分)
    1048 Find Coins (25 分)
    1047 Student List for Course (25 分)
    1046 Shortest Distance (20 分)
    1045 Favorite Color Stripe (30 分)
    1044 Shopping in Mars (25 分)
    1055 The World's Richest (25 分)
  • 原文地址:https://www.cnblogs.com/siahekai/p/5840343.html
Copyright © 2011-2022 走看看