不是每个c语言读取bmp图像像文件都包含的部分是

BMP(BitMap File)文件是与硬件无关的位图文件,使用非常广泛,它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BblP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。 - 下载频道 - CSDN.NET
&&&&BMP(BitMap File)文件是与硬件无关的位图文件,使用非常广泛,它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BblP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。
&BMP(BitMap File)文件是与硬件无关的位图文件,使用非常广泛,它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BblP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。
BMP(BitMap File)文件是与硬件无关的位图文件,使用非常广泛,它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BblP文件所占用的空间很大。
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 获得积分,详细见。
完成任务获取积分。
论坛可用分兑换下载积分。
第一次绑定手机,将获得5个C币,C币可。
关注并绑定CSDNID,送10个下载分
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
课程资源下载排行
积分不够下载该资源
如何快速获得积分?
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
BMP(BitMap File)文件是与硬件无关的位图文件,使用非常广泛,它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BblP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。
所需积分:1
剩余积分:
扫描微信二维码精彩活动、课程更新抢先知
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000
VIP服务公告:您的举报已经提交成功,我们将尽快处理,谢谢!
AcdSee转换就可,打开图片后选“转换格式”,有几十种类型可以选。
但是单张的BMP或者JPG转成GIF,也绝对不会有动画的效果。
而且GIF最高...
大家还关注
(window.slotbydup=window.slotbydup || []).push({
id: '2081942',
container: s,
size: '1000,60',
display: 'inlay-fix'某未经压缩BMP图像文件的参数如下图所示 每个选项都解释一下,分可以追加到100_百度作业帮
某未经压缩BMP图像文件的参数如下图所示 每个选项都解释一下,分可以追加到100
某未经压缩BMP图像文件的参数如下图所示&每个选项都解释一下,分可以追加到100
A:错误.800*600指这个图像总共的像素数目B:错误.BMP是单幅图像,不能表示序列(好像只有gif才能)C:错误:分辨率指的是每英寸的像素数目,而不是图像的尺寸D:正确.位图每个像素用(红,绿,蓝)三元组表示,每一种颜色用一个字节,故每个像素要用3个字节.如果你的教辅答案不是D那是答案错了(我也看过这道题)PKU-文件操作作业-BMP图像文件旋转 - CSDN博客
解题思路:
1.待处理的对象:
待处理的对象是BMP位图,实际上只是一种类型的文件流,和字符流什么的没有区别,这次练习的核心是为了锻炼出惊人的操作读写流的能力,所以,就将其当作01流就可以了。因此关于BMP最重要的就是要理解流的什么地方是什么,实际上文档上已经说得比较详细了。在此不再赘述BMP的基本理论,只重点讨论24位和32位位图。这里的位,实际上就是指一个像素格所占的位数(bit),需要知道的是1字节(Byte)=8bit,因此我们不得不回顾c++基本数据类型的占位。
2.c++基本数据类型的占位
char :1byte = 8bit
short:2byte = 16bit
int :4byte = 32bit
long :4byte = 32bit
所以下面的WORD和DWORD类型其实占位是一样的,可是为了保持文档中的叙述方式,再加上基本数据占位在不同编译器中有所差异,所以就这样吧
3.待处理对象的进一步讨论
从作业的文档中提取出来的有用的信息是
(1)BMP有一个文件头,见下面Head类的定义。这一串流占位14个字节(自己数)
(2)BMP有一个信息头,见下面Indo类的定义。这一串流占位40个字节(到这里是不是明白为什么文件头中图像数据的偏移一般是54了?)
(3)图像的像素数据,其中每一个像素格要么是RGB24的要么是RGB32的。RGB24就是一个像素占24位,这也就是普遍流行的24位图,24位是3个字节,分别就是为红、绿、蓝分配的字节。而RGB32多了一个字节,这是为alpha通道分配的,alpha通道是设置透明度的,故RGB32又叫做RGBa。我们只要分别定义这两种像素的基本结构就可以了。其余的颜色表什么的不用理会。在此有一个非常重要的理论,引用文档:“文件存储图像的每一行像素值时,如果存储该行像素值所占的字节数为4的倍数,则正常存储,否则,需要在后端补0,凑足4的倍数。”,拿24位位图来说,一个像素是3byte,如果一张图片的尺寸是37,那么就是111byte每行,按照这个规则,就要补1个0补成112位,如果正好被4整除了,那么就不补。由此我们至少知道两件事情:1、补0很麻烦,会影像流中有用数据的读取以及对转换后的图像数据也需要补0;&2、每行补0数量都是一样的。
4.转置的算法
实际上就是矩阵转置了,只是位图储存规则比较奇葩,倒着存什么的,自己想象加测试应该是没有问题的
5.泛型编程
我的旋转函数用了模板类型,因为处理24位和32位只有像素格的大小不同,其他都是一样的。在此有一个值得注意的地方就是32位位图不会出现补零的情况,套用24位的算法实际上是影像效率的
6.对齐边界
这是一个提示,之前我们了解到Head类型和Info类型的占位分别是14和40,前者不是4的倍数,为了防止读取流的时候Head被读取为16个字节,将对齐边界设置为16.其他值得注意的参考文档中有一处错误“002E-0031:此图像所用的颜色数,如值为0,表示所有颜色一样重要。”,002E-0031应该是002E-0035,从参考资料2可以看出来,不然从000E-0031只有36个字节了,少了4个
32位的图像处理我还没有测试过!因为找不到图。。据说可以ps生成。。如果32位的我有错误的地方请一定评论下来
#include&iostream&
#include&fstream&
#include&cstring&
#include&string&
#pragma pack(1)
typedef unsigned char BYTE;
typedef unsigned int DWORD;
typedef unsigned short WORD;
typedef long LONG;
class Head
// 位图文件的类型,必为16进制的4D42,或10进制的19778
// 位图文件整个文件的大小,有用
// 保留字1,必为0,无用
// 保留字2,必为0,无用
DWORD offB
// 图像数据偏移字节,一般来说是10进制下的54
class Info
// 信息头的大小,40,无用
// 图像的宽,单位是像素,重要
// 图像的高,单位是像素,重要
// 目标设备的平面数不清,必须为1,无用
// 每个像素所需的位数,必须是1(双色), 4(16色),8(256色)或24(真彩色)之一,重要
DWORD biC // 位图压缩类型,必须是 0(不压缩),1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一,无用
DWORD biSizeI
// 位图的大小,以字节为单位,有用(注意和Head中的size的区别)
LONG biXPelsPerM// 位图水平分辨率,每米像素数,无用
LONG biYPelsPerM// 位图垂直分辨率,每米像素数,无用
DWORD biClrU
// 位图实际使用的颜色表中的颜色数,无用
DWORD biClrI// 位图显示过程中重要的颜色数,无用
class RGB24
RGB24(){ green = 0; red = 0; blue = 0; }
class RGB32: public RGB24
RGB32():RGB24(), alpha(0){};
/* getDiff: 获取每行需要补的0的个数 */
int getDiff(Info& info)
int t = (info.w * info.bitc + 31) / 8;
t -= t % 4;
t - info.w * info.bitc / 8;
/* Trans: 核心函数,函数模板,BMP转置 */
template&typename T&
bool Trans(ifstream& src, ofstream& dest, Head& head, Info& info)
Head new_head =
Info new_info =
new_info.h = info.w;
new_info.w = info.h;
int diff = getDiff(info);
T* pic = new T[info.h * info.w];
for(int i = 0; i & info.h; i++)
src.read((char*) (pic + i * info.w), info.w * sizeof(T));
src.seekg(diff, ios::cur);
diff = getDiff(new_info);
char* null = new char[diff + 1];
memset(null, 0, diff + 1);
new_info.biSizeImage = new_info.h * (new_info.w + diff);
new_head.size = new_info.biSizeImage + sizeof(new_head) + sizeof(new_info);
T* new_pic = new T[new_info.w * new_info.h];
for(int i = 0; i & new_info.h; i++)
for(int j = 0; j & new_info.w; j++)
*(new_pic + (new_info.h - 1 - i) * new_info.w + j) =
*(pic + j * info.w + i);
dest.write((char *) &new_head, sizeof(Head));
dest.write((char *) &new_info, sizeof(Info));
for(int i = 0; i & new_info.h; i++)
dest.write((char*) (new_pic + new_info.w * i), new_info.w * sizeof(T));
dest.write((char*) null, diff);
int main(int argc, char* argv[])
char* src_
char* dest_
if(argc == 1)
cout && &use \&src.bmp\& as default input bmp file name, and \&dest.bmp\& as default ouput name\n&;
src_name = new char[10];
dest_name = new char[10];
strcpy(src_name, &src.bmp&);
strcpy(dest_name, &dest.bmp&);
src_name = argv[1];
dest_name = argv[2];
ifstream src(src_name, ios::in|ios::binary);
cout && &文件读取失败~& &&
ofstream dest(dest_name, ios::out|ios::binary);
src.read((char *) &head, sizeof(Head));
src.read((char *) &info, sizeof(Info));
/* 判断BMP的位数,分流 */
if(info.bitc == 24)
Trans&RGB24&(src, dest, head, info);
Trans&RGB32&(src, dest, head, info);

我要回帖

更多关于 matlab读取bmp图像 的文章

 

随机推荐