24位BMP位图的保存
我再ClientDC中已经绘制了图形,想以24位BMP保存下来
写了下面一段程序,可是总保存失败,打不开所保存的位图文件,
高手帮我看下
void CPainterView::OnFileSaveAs()
{
CFileDialog dlg(false);
if(dlg.DoModal()==IDOK)
{
CPainterDoc* pDoc = GetDocument();
CString name=dlg.GetPathName();
MessageBox(name);
ofstream fout(name,ios::binary);
CClientDC dc(this);
RECT r;
this->GetClientRect(&r);
int x=r.right-r.left+1;
int y=r.bottom-r.top+1;
int x1=x*3;
x1=x1%4?(x1/4+1)*4:x1;
char *data;
data=new char[x1*y];//一个CHAR型的数组
for(int i=0;i<y;i++)//先把所有的初始化为0,
{
for(int j=0;j<x1;j++)
{
data[j+i*x1]='0';
}
}
for(int i=0;i<y;i++)//取每个象素的颜色值,分别进行赋值
{
for(int j=0;j<x;j++)
{
COLORREF view=dc.GetPixel(j,y-1-i);
char red=(char)(view>>16);
char green=(char)(view>>8);
char blue=(char)view;
int k=(j+i*x)*3;
data[k]='2';
data[k+1]='255';
data[k+2]='3';
}
}
BITMAPFILEHEADER bh;
BITMAPINFOHEADER bi;
bh.bfOffBits=sizeof(bh)+sizeof(BITMAPINFOHEADER);
bh.bfReserved1=0;
bh.bfReserved2=0;
bh.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+x1*y;
bh.bfType='BM';
bi.biSize=sizeof(BITMAPINFOHEADER);
bi.biWidth=(long)x;
bi.biHeight=(long)y;
bi.biPlanes=1;
bi.biBitCount=24;
bi.biCompression=0;
bi.biSizeImage=sizeof(BITMAPFILEHEADER)+sizeof (BITMAPINFOHEADER)+x1*y;
fout.write((char*)&bh,sizeof(bh));
fout.write((char*)&bi,sizeof(bi));
fout.write(data,x1*y);
fout.close();
}
写了下面一段程序,可是总保存失败,打不开所保存的位图文件,
高手帮我看下
void CPainterView::OnFileSaveAs()
{
CFileDialog dlg(false);
if(dlg.DoModal()==IDOK)
{
CPainterDoc* pDoc = GetDocument();
CString name=dlg.GetPathName();
MessageBox(name);
ofstream fout(name,ios::binary);
CClientDC dc(this);
RECT r;
this->GetClientRect(&r);
int x=r.right-r.left+1;
int y=r.bottom-r.top+1;
int x1=x*3;
x1=x1%4?(x1/4+1)*4:x1;
char *data;
data=new char[x1*y];//一个CHAR型的数组
for(int i=0;i<y;i++)//先把所有的初始化为0,
{
for(int j=0;j<x1;j++)
{
data[j+i*x1]='0';
}
}
for(int i=0;i<y;i++)//取每个象素的颜色值,分别进行赋值
{
for(int j=0;j<x;j++)
{
COLORREF view=dc.GetPixel(j,y-1-i);
char red=(char)(view>>16);
char green=(char)(view>>8);
char blue=(char)view;
int k=(j+i*x)*3;
data[k]='2';
data[k+1]='255';
data[k+2]='3';
}
}
BITMAPFILEHEADER bh;
BITMAPINFOHEADER bi;
bh.bfOffBits=sizeof(bh)+sizeof(BITMAPINFOHEADER);
bh.bfReserved1=0;
bh.bfReserved2=0;
bh.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+x1*y;
bh.bfType='BM';
bi.biSize=sizeof(BITMAPINFOHEADER);
bi.biWidth=(long)x;
bi.biHeight=(long)y;
bi.biPlanes=1;
bi.biBitCount=24;
bi.biCompression=0;
bi.biSizeImage=sizeof(BITMAPFILEHEADER)+sizeof (BITMAPINFOHEADER)+x1*y;
fout.write((char*)&bh,sizeof(bh));
fout.write((char*)&bi,sizeof(bi));
fout.write(data,x1*y);
fout.close();
}
...全文
相关推荐
将24位位图的像素数据保存为BMP格式的文件
通过以上步骤,你可以编写一个C++程序,根据给定的文件名、像素数据、位图宽度和高度,将24位位图数据保存为BMP文件。
24位bmp位图转灰度图(MFC实现)
在图像处理领域,将24位彩色BMP位图转换为灰度图是一个常见的操作。24位BMP位图通常包含红、绿、蓝三种颜色通道,每种颜色通道有8位,总共24位表示一个像素的颜色信息。
C++读取保存BMP图像
在本文中,我们将深入探讨如何使用C++编程语言来读取和保存BMP(Bitmap)图像,特别是8位和24位的BMP格式。
BMP图像文件读写操作类,C++实现,支持24位位图
本篇将深入探讨如何使用C++实现BMP图像文件的读写操作,特别是针对24位位图的处理。
【原创】CDMA手机产业链及厂商介绍
CDMA手机产业链及厂商介绍 1. CDMA市场概况中国电信的三大业务品牌:一个是商务领航针对政企客户、一个是我的E家、第三个是天翼。中国电信提出了3月份实现3G(天翼)试商用、5月份规模商用的发展进度。有业内人士认为,在3G的竞争中,中国电信已经获得了至少六个月的先发优势,在初期的竞争中这种先发优势将成为中国CDMA产业高速发展的根本推动力。中电信集采EVDO终端,高


图形处理/算法
