bmp图片的有关操作
读取bmp图片 并生成新的bmp图片
#include "stdafx.h"
#include <windows.h>
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
long bfSize, bfOffBits;
long biWidth, biHeight, biBitCount, biSizeImage;
// 打开待读的位图文件
FILE *fp = NULL;
int ret = fopen_s(&fp, "D:\\VC\\BMP\\img1024.bmp", "rb");
if (fp == 0) {
cout << "open file failed" << endl;
return -1;
}
// 建立待生成的位图文件
FILE *wfp = NULL;
ret = fopen_s(&wfp, "D:\\VC\\BMP\\img_out.bmp", "wb");
if (wfp == 0) {
cout << "create output file failed" << endl;
return -1;
}
// 获取BITMAPFILEHEADER
BITMAPFILEHEADER fileheader = { 0 };
fread(&fileheader, sizeof(BITMAPFILEHEADER), 1, fp);
if (fileheader.bfType != 0x4D42) {
cout << "Not BMP Image" << endl;
return -1;
}
else {
bfSize = fileheader.bfSize;
bfOffBits = fileheader.bfOffBits;
fwrite(&fileheader, sizeof(BITMAPFILEHEADER), 1, wfp); // 写入BITMAPFILEHEADER
}
// 获取BITMAPINFOHEADER
BITMAPINFOHEADER head = { 0 };
fread(&head, sizeof(BITMAPINFOHEADER), 1, fp);
biWidth = head.biWidth;
biHeight = head.biHeight;
biBitCount = head.biBitCount;
biSizeImage = head.biSizeImage;
if (biBitCount != 24) {
fclose(fp);
cout << "Not 24bit Bitmap" << endl;
return -1;
}
else {
fwrite(&head, sizeof(BITMAPINFOHEADER), 1, wfp); // 写入BITMAPINFOHEADER
}
// 输出文件属性信息
cout << "文件大小 => " << bfSize << "Byte" << endl;
cout << "数据区偏移量 => " << bfOffBits << "Byte" << endl;
cout << "宽度 => " << biWidth << "px" << endl;
cout << "高度 => " << biHeight << "px" << endl;
cout << "颜色位数 => " << biBitCount << "bit" << endl;
cout << "数据区大小 => " << biSizeImage << "Byte" << endl;
// 把位图数据区读入BYTE缓冲区
BYTE *pBmpBuf = new BYTE[biSizeImage];
size_t size = 0;
while (true) {
int iret = fread(&pBmpBuf[size], 1, 1, fp);
if (iret == 0) {
break;
}
else {
size = size + iret;
}
}
fclose(fp);
int pitch = biWidth % 4; // 每行数据字节数必须是4的倍数
BYTE ar[1]={0};//不足4的倍数补0
BYTE vRGB[3];
for (int i =0; i <biHeight; ++i)
{
int realPitch = i*pitch;
for (int j = 0; j < biWidth; ++j)
{
vRGB[0] = pBmpBuf[(i*biWidth + j) * 3 + realPitch]; // BLUE
vRGB[1] = pBmpBuf[(i*biWidth + j) * 3 + 1 +realPitch]; // GREEN
vRGB[2] = pBmpBuf[(i*biWidth + j) * 3 + 2 + realPitch]; // RED
fwrite(vRGB, sizeof(vRGB), 1, wfp); //把描述一个像素的R、G、B值写入输出缓冲区
}
for(int m=0;m<pitch;m++)
fwrite(ar,sizeof(ar),1,wfp); //补零
}
// 关闭文件缓冲区
delete[] pBmpBuf;
pBmpBuf = NULL;
// 写输出图像
fclose(wfp);
cout << endl << "创建输出文件成功" << endl;
return 0;
}
bmp图片的有关操作的更多相关文章
- linu下C语言之BMP图片操作编程(上)
BMP文件格式,也被称为位图图像文件或与设备无关的位图文件格式(DIB)或者只是一个位图,是 一个光栅图形 图像文件格式使用 来存储位图,数字,图片,独立的显示设备. 微软已经定义了一个特定的表示颜色 ...
- 收集C#常用类:对图片的处理操作
using System; using System.Collections; using System.IO; using System.Drawing; using System.Drawing. ...
- Python中通过Image的open之后,去show结果打不开bmp图片,无法正常显示图片
在windows的cmd命令行下,使用Python的PIL库打开并显示一个jpg图片: ? 1 2 3 openedImg = Image.open(saveToFile); print " ...
- BMP图片转换为JPEG图片
原文:BMP图片转换为JPEG图片 昨天在家学习,发现很多人把BMP图片转换为其它图片格式,有些人写得简单,有些人写得复杂. Insus.NET在想,一直在做文件上传,下载,或是图片剪切,都有进行过文 ...
- bmp图片显示
文件IO项目: 在开发板屏幕上循环显示目录里的图片 a.按照一定的间隔循环显示目录里的bmp图片 b.实现手指滑动来显示目录里的图片(bmp,jpg)上一张,下一张 d1: 1.能操控屏幕(查询开发板 ...
- BMP图片格式模型(2)
因为公司的主要业务是图像识别相关的,因此对图像处理.识别是我学习的重点.虽然写程序也不少年了,但是对于图像处理领域,我还是一个新兵.对很多基础的概念也还是存在盲区,所以想在边学边做的过程中,对一些概念 ...
- 简单bmp图片处理工具——python实现
预备实现功能: 1.读取bmp文件 2.保存bmp文件 3.对bmp图片进行放大.缩小 4.对bmp图片进行灰度化 5.对bmp图片进行旋转 bmp文件格式非常简单,对于我这种初学者来说减少了不少不必 ...
- Nginx中防盗链(下载防盗链和图片防盗链)及图片访问地址操作记录
日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...
- MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片
版权声明:本文为博主原创文章,转载请注明CSDN博客源地址! 共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/26404733 ...
随机推荐
- Windows无法安装到GPT分区的磁盘的解决方法
thinkpad 预装win8的机子,硬盘采用gpt分区,在重新安装其它系统的时候是无法安装的,会提示“windows无法安装到这个磁盘,选中的磁盘采用GPT分区 形式".所以先采用下面的方 ...
- js根据不同浏览器(分辨率)调用不同css
根据不同浏览器: <script type="text/javascript"> var version = navigator.userAgent; if (vers ...
- listView当中有嵌套了有onClickListener的控件时ListView自身的onItemClick无响应的解决方案
Ref:http://www.cnblogs.com/bluestorm/archive/2013/03/24/2979557.html android:descendantFocusability ...
- Jetty使用教程(四:23)—Jetty开发指南
二十三.Maven和Jetty 这一章节将说明如何通过Maven管理Jetty和使用Jetty的Maven插件. 23.1 使用Maven Apache Maven是一个款软件项目管理工具.基于项目对 ...
- xml dtd 内部dtd 外部DTD 公共DTD
(一个可以用来校验xml有效性的网站:http://www.xmlvalidation.com/) (经测试 eclipse neon 对于dtd的校验并不严格,比如DOCTYPE后面的根元素名与实际 ...
- CozyRSS开发记录5-订阅列表栏里的项
CozyRSS开发记录5-订阅列表栏里的项 1.订阅列表栏里的项的原型图 这里列表项依然参考傲游的RSS阅读器,以后可能会微调. 2.使用ControlTemplate来定制ListBoxItem 给 ...
- pyhon 模块与库
引用“http://www.iplaypython.com/module/” 引用“http://codingnow.cn/language/265.html” Python模块是什么? 玩蛇网:一个 ...
- 新的篇章--Python
这周已经开始Python的学习了,感觉Python类似于Powershell, 但又有不同点.在此总结一下新学到的资料: 简单的使用变量的方法: name= input("input you ...
- POJ 2559 Largest Rectangle in a Histogram ——笛卡尔树
[题目分析] 本来是单调栈的题目,用笛卡尔树可以快速的水过去. 把每一个矩阵看成一个二元组(出现的顺序,高度). 然后建造笛卡尔树. 神奇的发现,每一个节点的高度*该子树的大小,就是这一块最大的子矩阵 ...
- 【Unity3d游戏开发】UGUI插件入门之游戏菜单
ugui是unity4.6开始加入的一个新的ui系统,非常强大,下面我们将通过一系列博客的方式一起来学习一下ugui的使用.本篇博客会介绍如何使用ugui制作一个游戏菜单,并且了解如何让物体与ugui ...