资源简介
网上找了半天没找到,自己整理的 BMP 8位转24位

代码片段和文件信息
// ConvertBMP.cpp : 定义控制台应用程序的入口点。
//
#include “stdafx.h“
#include
#define WIDTHBYTES(bits) ((bits + 31)/32*4)
BOOL Convert8To24(RGBQUAD * pColorTable BYTE* srcImage BYTE* dstImage LONG imageWidthLONG imageHeight)
{
LONG lLineBytes24 = ((imageWidth*24+31)/32*4);
LONG lLineBytes8 = ((imageWidth*8+31)/32*4);
int i j n;
for(i = 0; i < imageHeight; i++)
{
for(j = 0 n = 0; j < lLineBytes8; j++)
{
int num = *(srcImage+lLineBytes8*i+j); // 获取8位中调色板信息的偏移量
*(dstImage+lLineBytes24*i+n) = pColorTable[num].rgbBlue;
n++;
*(dstImage+lLineBytes24*i+n) = pColorTable[num].rgbGreen;
n++;
*(dstImage+lLineBytes24*i+n) = pColorTable[num].rgbRed;
n++;
}
}
return true;
}
void ChangeBmpHeader(PBITMAPFILEHEADER pbfheader PBITMAPINFOHEADER pbiheader WORD wType)
{
pbiheader->biBitCount = wType; // 24 或者 8
pbiheader->biClrUsed = (wType == 24) ? 0 : 256;
pbiheader->biClrImportant = (wType == 24) ? 0 : 256;
pbfheader->bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + pbiheader->biClrUsed * sizeof(RGBQUAD);
pbiheader->biSizeImage = WIDTHBYTES(pbiheader->biWidth * pbiheader->biBitCount) * pbiheader->biHeight;
pbfheader->bfSize = pbfheader->bfOffBits + pbiheader->biSizeImage;
}
int _tmain(int argc _TCHAR* argv[])
{
FILE* fpSrc = fopen(“1.bmp““rb+“);
if(fpSrc == NULL) return false;
// 读取BMP文件头信息
BITMAPFILEHEADER bf;
fread(&bf sizeof(BITMAPFILEHEADER) 1 fpSrc);
// 读取位图信息头
BITMAPINFOHEADER bi;
fread(&bi sizeof(BITMAPINFOHEADER) 1 fpSrc);
int bmpWidth = bi.biWidth;
int bmpHeight = bi.biHeight;
int biBitCount = bi.biBitCount;
RGBQUAD *pColorTable;
if(bi.biBitCount == 8) {
pColorTable=new RGBQUAD[256];
fread(pColorTable sizeof(RGBQUAD) 256 fpSrc);
}
else if(bi.biBitCount == 24){
fclose(fpSrc);
return;
}
int lineByte=(bmpWidth * biBitCount/8+3)/4*4;
unsigned char *pBmpBuf;
pBmpBuf = new unsigned char[lineByte * bmpHeight];
fread(pBmpBuf 1 lineByte * bmpHeight fpSrc);
//fclose(fpSrc);
//----------------------------------------------------------------
//FILE* fpDes = fopen(“2.bmp““wb“);
//if(fpDes == NULL)
//{
// fclose(fpSrc);
// return FALSE;
//}
rewind(fpSrc);
ChangeBmpHeader(&bf &bi 24);
fwrite(&bf sizeof(BITMAPFILEHEADER) 1 fpSrc);
fwrite(&bi sizeof(BITMAPINFOHEADER) 1 fpSrc);
int lineByte24 = (bmpWidth * bi.biBitCount/8+3)/4*4;
unsigned char *dstImage;
dstImage = new unsigned char[lineByte24 * bmpHeight];
Convert8To24(pColorTable pBmpBuf dstImage bmpWidth bmpHeight);
fwrite(dstImage lineByte24 * bmpHeight 1 fpSrc);
delete [] pBmpBuf;
delete [] dstImage;
fclose(fpSrc);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2798 2017-07-20 18:20 ConvertBMP\ConvertBMP.cpp
文件 4142 2017-07-12 18:42 ConvertBMP\ConvertBMP.vcxproj
文件 1314 2017-07-12 18:42 ConvertBMP\ConvertBMP.vcxproj.filters
文件 376 2017-07-12 19:00 ConvertBMP\ConvertBMP.vcxproj.user
文件 1574 2017-07-12 18:42 ConvertBMP\ReadMe.txt
文件 215 2017-07-12 18:42 ConvertBMP\stdafx.cpp
文件 233 2017-07-12 18:42 ConvertBMP\stdafx.h
文件 236 2017-07-12 18:42 ConvertBMP\targetver.h
目录 0 2017-07-20 18:19 ConvertBMP
----------- --------- ---------- ----- ----
10888 9
- 上一篇:软件工程专业实习报告
- 下一篇:百度地图api
相关资源
- 易语言播放器组件无缝转换(Demo2.e)
- IEEE754 浮点转换工具
- flash as3 多点触控-缩放-旋转-滑动.zi
- 栈的实现及应用,六种基本算法
- USB转串口驱动,FT232R驱动程序,最新
- 音乐代码转换软件 单片机编程时用
- WinCE下CP210x的驱动程序
- Img2Lcd(将图片转换为数组的工具)
- 旋转矩阵求欧拉角的简单算法
- IP地址转换整形工具
- UNICODE GBK双向码表二进制文件
- 基于c8051f020的AD转换程序及LCD显示程序
- 三维重建(旋转)由已知对应图像点
- 8位双向移位寄存器的设计与实现
- K码和经纬度转换excel表格
- 模拟段页式虚拟存储管理中地址转换
- UART转CAN或LIN的工具(Uart2any)和文档
- EXE 转换 BAT工具
- 文件名批量大小写转换工具
- 莱卡 全站仪数据格式转换程序,有源
- 常用编码(UnicodeUTF-8GBK)转换工具
- 可以把delphi的dcu文件转换为pas文件的
- 基于JM20329的SATA转USB 1394
- utf-8 ansi 字符互转 工具
- 网络(UDP)转串口程序
- Cad坐标转换工具,可进行批量转换
- 单片机控制的步进电机正反转和加速
- coe2tle经典轨道根数转成二行轨道根数
- 三维地形的仿真显示实现了对地图的
- vc利用MFC底层开发的二维GIS管理软件,
评论
共有 条评论