BMP(全称Bitmap)是Window *** 作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广。
它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩坦誉渣,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。
注意事项:
BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件让悄格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持虚册BMP图像格式。
bmp是什么意思
BMP是英文Bitmap(位图)的简写,它是Windows *** 作系统中的标准图像文件格式,能够被多种Windows应用程序所支持。
随着Windows *** 作系统的流行与丰富的Windows应用程序的开发,BMP位图格式理所当然地被广泛应用。
这种格式的特点是缺迹包含的图像信息较丰链扮弊富,几乎不进行压缩,但由此导致了它与生俱来棚族的缺点--占用磁盘空间过大。
所以,BMP在单机上比较流行。
BMP是BitMap的缩写,是微软的位图格式也许游戏中使用了其它自己研发的格式,而缩写也刚好是BMP,那也可能使用BMP扩展名,这就需要知道确切的文件格式才能找到对应的应用程序打开
那粗略的给你写个方法把
void DrawImage(HDC hdc,HBITMAP hbmp,COLORREF color,int x,int y,int width,int height,int SrcX,int SrcY){
HDC memDC=CreateCompatibleDC(hdc);
HDC maskDC=CreateCompatibleDC(hdc);
BITMAP bmpinfo;
HBITMAP maskBMP;
GetObject(hbmp,sizeof(BITMAP),&bmpinfo);
maskBMP=CreateBitmap(bmpinfobmWidth,bmpinfobmHeight,1,1,NULL);
SelectObject(memDC,hbmp);
SelectObject(maskDC,maskBMP);
SetBkColor(memDC,color);
BitBlt(maskDC,0,0,bmpinfobmWidth,bmpinfobmHeight,memDC,0,0,SRCCOPY);
BitBlt(hdc,x,y,width,height,memDC,SrcX,SrcY,SRCINVERT);
BitBlt(hdc,x,y,width,height,maskDC,SrcX,SrcY,SRCAND);
BitBlt(hdc,x,y,width,height,memDC,SrcX,SrcY,SRCINVERT);
DeleteObject(maskBMP);
DeleteDC(memDC);
DeleteDC(maskDC);
}
还给你解释一下是什么意思吗?知道怎么调用吗?
你应该知道什么意思把
不会的话查一下msdn,或者去csdn网站看看的。
右键打开你这个文件的盘,在工具栏---文件夹选项--查看下, 选显示所有文件和文件夹,同时去除隐藏受保护的系统文件前的勾,你会发现在你的盘符下多了一antoruninf 的文件,打开我们可以看到如下的内容: [AUTORUN] open=Iexplorersexe 这句话的意思就是当你双击盘符时自动打开写入注册表中的病毒程序文件, 即使病毒被杀死,但是注册表的信息依然存在,这就是无法打开盘符的原因, 知道了原因,那么我们就来删除病毒在注册表中的残留信息,开始---运行中输入regedit打开注册表编辑程序,ctrl+f打开查找命令,输入Iexplorersexe, 点查找,接下来会在注册表中找到此键值一般在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer \MountPoints\下
如果说的是VC的IDE中资源编辑器,那么是因为编辑器不支持真彩位图。
如果说的是一个MFC写的打开BMP程序,那么是有情况没有处理。BMP位图格式中,常见有4像素取整对齐问题、图像倒置问题、多种色彩模式问题和调色板多种格式问题,哪一个处理不好,都可能造成部分BMP文件无法打开。
直接上代码吧:
#include <Windowsh>
#include <stdioh>
#include <stringh>
#include <malloch>
unsigned char pBmpBuf;//读入图像数据的指针
int bmpWidth;//图像的宽
int bmpHeight;//图像的高
RGBQUAD pColorTable;//颜色表指针
int biBitCount;//图像类型,每像素位数
bool readBmp(char bmpName)
{
//二进制读方式打开指定的图像文件
FILE fp=fopen(bmpName,"rb");
if(fp==0) return 0;
//跳过位图文件头结构BITMAPFILEHEADER
fseek(fp, sizeof(BITMAPFILEHEADER),0);
//定义位图信息头结构变量,读取位图信息头进内存,存放在变量head中
BITMAPINFOHEADER head;
fread(&head, sizeof(BITMAPINFOHEADER), 1,fp);
//获取图像宽、高、每像素所占位数等信息
bmpWidth = headbiWidth;
bmpHeight = headbiHeight;
biBitCount = headbiBitCount;
//定义变量,计算图像每行像素所占的字节数(必须是4的倍数)
int lineByte=(bmpWidth biBitCount/8+3)/44;
//灰度图像有颜色表,且颜色表表项为256
if(biBitCount==8){
//申请颜色表所需要的空间,读颜色表进内存
pColorTable=new RGBQUAD[256];
fread(pColorTable,sizeof(RGBQUAD),256,fp);
}
//申请位图数据所需要的空间,读位图数据进内存
pBmpBuf=new unsigned char[lineByte bmpHeight];
fread(pBmpBuf,1,lineByte bmpHeight,fp);
//关闭文件
fclose(fp);
return 1;
}
bool saveBmp(char bmpName, unsigned char imgBuf, int width, int height,
int biBitCount, RGBQUAD pColorTable)
{
//如果位图数据指针为0,则没有数据传入,函数返回
if(!imgBuf)
return 0;
//颜色表大小,以字节为单位,灰度图像颜色表为1024字节,彩色图像颜色表大小为0
int colorTablesize=0;
if(biBitCount==8)
colorTablesize=1024;
//待存储图像数据每行字节数为4的倍数
int lineByte=(width biBitCount/8+3)/44;
//以二进制写的方式打开文件
FILE fp=fopen(bmpName,"wb");
if(fp==0) return 0;
//申请位图文件头结构变量,填写文件头信息
BITMAPFILEHEADER fileHead;
fileHeadbfType = 0x4D42;//bmp类型
//bfSize是图像文件4个组成部分之和
fileHeadbfSize= sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)
+ colorTablesize + lineByteheight;
fileHeadbfReserved1 = 0;
fileHeadbfReserved2 = 0;
//bfOffBits是图像文件前3个部分所需空间之和
fileHeadbfOffBits=54+colorTablesize;
//写文件头进文件
fwrite(&fileHead, sizeof(BITMAPFILEHEADER),1, fp);
//申请位图信息头结构变量,填写信息头信息
BITMAPINFOHEADER head;
headbiBitCount=biBitCount;
headbiClrImportant=0;
headbiClrUsed=0;
headbiCompression=0;
headbiHeight=height;
headbiPlanes=1;
headbiSize=40;
headbiSizeImage=lineByteheight;
headbiWidth=width;
headbiXPelsPerMeter=0;
headbiYPelsPerMeter=0;
//写位图信息头进内存
fwrite(&head, sizeof(BITMAPINFOHEADER),1, fp);
//如果灰度图像,有颜色表,写入文件
if(biBitCount==8)
fwrite(pColorTable, sizeof(RGBQUAD),256, fp);
//写位图数据进文件
fwrite(imgBuf, heightlineByte, 1, fp);
//关闭文件
fclose(fp);
return 1;
}
int main()
{
char inFileName[90],outFileName[90];
printf("请输入原始位图文件的文件名:");
scanf("%s",inFileName);
printf("请输入加密程序产生的新位图文件的文件名:");
scanf("%s",outFileName);
//读入指定BMP文件进内存
readBmp(inFileName);
//输出图像的信息
printf("width=%d,height=%d, biBitCount=%d\n",bmpWidth,bmpHeight, biBitCount);
//将图像数据存盘
saveBmp(outFileName, pBmpBuf, bmpWidth, bmpHeight, biBitCount, pColorTable);
//清除缓冲区,pBmpBuf和pColorTable是全局变量,在文件读入时申请的空间
delete []pBmpBuf;
if(biBitCount==8)
delete []pColorTable;
return 0;
}
打开bmp图像(支持2色,256色,24bit),保存文件(只支持256色),获取原始的缓冲区(raw_buf), “种子杯”的时候把接口改成了C语言的提供给参赛者
希望采纳
以上就是关于bmp是什么格式的文件全部的内容,包括:bmp是什么格式的文件、游戏文件夹下bmp文件格式打开后显示没有预览,能不能用某个程序打开呢 是不是加密了.、C++如何将bmp图片显示出来等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)