位图文件主要分为3部分:1. 文件信息头     14Byte

2. 位图信息头     40Byte

3. RGB颜色阵列   由图像长宽尺寸决定

1. 文件信息头

定义结构体:

typedef struct tagBITMAPFILEHEADER { /* bmfh */

UINT bfType; 
DWORD bfSize;
UINT bfReserved1;
UINT bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
 
bfType:必须是0x4D42
bfSize: 位图文件的大小
bfReserved1:保留成员1,必须为0
bfReserved2:保留成员2,必须为0
bfOffBits:从文件头开始到实际的位图数据之间的偏移量
 
2. 位图信息头
定义结构体:
typedef struct tagBITMAPINFOHEADER { /* bmih */

DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
 
biSize:结构体大小,以字为单位(4字节),4字节对齐
biWidth: 图像宽度,以像素为单位
biHeight:图像高度,以像素为单位。大于0,图像是倒向的;小于0,图像是正向的。大多数为倒向的。就是说图像数据是从图像的左下脚的像素开始一行一行的存储的。
biPlanes:总是为1
biBitCount:每像素所占的比特数(位数),一般为24或32位
biCompression:图像数据压缩类型,讨论没有压缩的类型:BI_RGB
biSizeImage:说明图像的大小,以字节为单位。为BI_RGB类型时可以设置为0
biXPelsPerMeter:水平分辨率,以像素/米表示
biYPelsPerMeter:垂直分辨率,以像素/米表示
biClrUsed:说明位图实际使用的调色板中的索引数,为0就是使用所有的索引数
biClrImportant:说明对图像显示有重要影响的索引数,为0就是都重要
 
 
3. RGB颜色阵列
windows下RGB颜色阵列实际上是以BGR格式来存储的,24位就是从高位到低位每个字节存储的颜色数据依次是BGR,32位的RGB位图从高位到低位依次是BGR以及最低一个字节位图像透明度
 
4. 加载文件头
  //Load the file header

   BITMAPFILEHEADER header;
   memset(&header, 0, sizeof(header));
   inf.read((char*)&header, sizeof(header));
   if(header.bfType != 0x4D42)
         return false;
 
5. 加载位图信息
//Load the image information header

BITMAPINFOHEADER infoheader;
memset(&infoheader, 0, sizeof(infoheader));
inf.read((char*)&infoheader, sizeof(infoheader));
m_iImageWidth = infoheader.biWidth;
m_iImageHeight = infoheader.biHeight;
m_iBitsPerPixel = infoheader.biBitCount;
 
6. 行对齐
加载得到的位图信息的每个像素是4字节对齐的,如果图像的像素不是4字节对齐,会自动在位后面补零,凑成4字节对齐。
这样图像数据的长度就是:
//Calculate the image data size

int iLineByteCnt = (((m_iImageWidth*m_iBitsPerPixel) + 31) >> 5) << 2;
m_iImageDataSize = iLineByteCnt * m_iImageHeight;
 
 
 
 
 
 
 
 
 
 
 
 
 

电子相册之bitmap的更多相关文章

  1. WPF 制作电子相册浏览器

    周末的时候,闲着无聊,做了一个电子相册浏览器.比较简单.界面如下: 主要部分代码如下: MainWindow.xaml <local:HeaderedWindow x:Class="P ...

  2. 基于SSE4和多核编程的电子相册的实现

    基于SSE4和多核编程的电子相册的实现   摘要:电子相册中前后两张图片的切换会产生淡入淡出效果,而且切换过程中需要大量的中间计算过程,而SSE4和多核编程技术能够有效加快中间的计算过程,有效减少图片 ...

  3. Java-android使用GridView布局的电子相册&服务器获取图片

    转  http://www.tuicool.com/articles/B7JNv2 电子相册的思路: 1.先是考虑布局,我用的是GridView布局 2.GridView中又该怎么显示图片,其实我的这 ...

  4. [翻译]开发文档:android Bitmap的高效使用

    内容概述 本文内容来自开发文档"Traning > Displaying Bitmaps Efficiently",包括大尺寸Bitmap的高效加载,图片的异步加载和数据缓存 ...

  5. 【开源毕设】一款精美的家校互动APP分享——爱吖校推 [你关注的,我们才推](持续开源更新3)附高效动态压缩Bitmap

    一.写在前面 爱吖校推如同它的名字一样,是一款校园类信息推送交流平台,这么多的家校互动类软件,你选择了我,这是我的幸运.从第一次在博客园上写博客到现在,我一次一次地提高博文的质量和代码的可读性,都是为 ...

  6. Android Bitmap 和 ByteArray的互相转换

    Android Bitmap 和 ByteArray的互相转换 移动平台图像处理,需要将图像传给native处理,如何传递?将bitmap转换成一个 byte[] 方便传递也方便cpp代码直接处理图像 ...

  7. Android-Drawable、Bitmap、byte[]、资源文件相互转换

    我们在Android的开发中,经常可以遇到图片的处理,当中,有很多是 Bitmap.Drawable.byte[]和资源文件它们直接相互转换. 今天就此总结一下: 1.资源文件转为Drawable 2 ...

  8. bitmap对海量无重复的整数排序--转

    原文地址:http://blog.csdn.net/u013074465/article/details/46956295 现在有n个无重复的正整数(n 小于10的7次方),如果内存限制在1.5M以内 ...

  9. 基于位图(Bitmap、BitmapData)的图片处理方法(C#)

    目前操作位图的主流方法有三种: 1.基于Bitmap像素的处理方法,以GetPixel()和SetPixel()方法为主.方法调用简单,但是效率偏低. 2.基于内存的像素操作方法,以System.Ru ...

随机推荐

  1. 【Leetcode】【Medium】3Sum

    Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...

  2. 大数据学习---大数据的学习【all】

    大数据介绍 什么是大数据以及有什么特点 大数据:是指无法在一定时间内用常规软件工具对其内容进行抓取.管理和处理的数据集合. 大数据是一种方法论:“一切都被记录,一切都被数字化,从数据中寻找需求,寻找知 ...

  3. 学习的矩阵微积分The matrix calculus you need for deep learning

    学习的矩阵微积分The matrix calculus you need for deep learning https://explained.ai/matrix-calculus/index.ht ...

  4. 索引反向使用案例,加index_desc hint

    drop index idx_t;create index idx_t on t(owner desc,object_type asc); select /*+index(a,idx_t)*/ * f ...

  5. Vue组件绑定自定义事件

    Vue组件使用v-on绑定自定义事件: 可以分为3步理解: 1.在组件模板中按照正常事件机制绑定事件: template: '<button v-on:click="increment ...

  6. phonegap 的指南针 api Compass

    一. Compass 介绍方法参数   1.Compass 也就是,常说的指南针,又叫罗盘 2.方法 compass.getCurrentHeading compass.watchHeading co ...

  7. FZU-1759 Super A^B mod C---欧拉降幂&指数循环节

    题目链接: https://cn.vjudge.net/problem/FZU-1759 题目大意: 求A^B%C 解题思路: 注意,这里long long需要用%I64读入,不能用%lld #inc ...

  8. Java连接MQ的实例, 测试类

    package cjf.mq.mqclient; import com.ibm.mq.MQC; import com.ibm.mq.MQEnvironment; import com.ibm.mq.M ...

  9. JavaWeb之session应用

    session和cookie都是用来存储信息的,区别是session是在服务器端存储信息,而cookie则是在浏览器端存储信息. 通常服务器端存储session,服务器端存储和获取session,一般 ...

  10. Sonar安装和常见问题解决

    Sonar是一款代码质量分析工具,有助于帮助代码质量提高. Sonar的官网地址为:https://www.sonarqube.org/downloads/ 点击 Show All Versions ...