首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

VC6 中处理BMP图,该怎么解决

2012-06-08 
VC6 中处理BMP图,急现已有一幅BMP图,大小为800*600现需将它在内存中转换为1024*1024的图要求:不拉伸,将

VC6 中处理BMP图,急
现已有一幅BMP图,大小为800*600;

现需将它在内存中转换为1024*1024的图;

要求:不拉伸,将原图放在1024*1024的中间部位;

超出原图面积的区域,一律白色代替;

求思路及代码,请知道的朋友来指点一下;急~

[解决办法]
在内存中生成一张1024*1024的图,全白色
算坐标,在内存中把小图画在大图上

显示or保存

gdi
gdi+
cximage
都可以实现
[解决办法]
方法一 
新建一个1024*1024的白色图,然后把你的bmp贴(bitblt)到相对中间的位置

方法二
填像素, 建个1024*1024的缓存 打开bmp 800*600的,对应位置填充像素,没有的给255
这个其实是生成了个新的bmp
[解决办法]
临时写了一个 试试看

C/C++ code
void CenterBitmap( CBitmap &SrcBmp, CBitmap &DstBmp,                 const int cx, const int cy, const COLORREF backColor ){  //屏幕DC  CDC *pScreenDC = CDC::FromHandle(CreateDC( _T("DISPLAY"), NULL, NULL, NULL ));  //源DC  CDC SrcDC;  SrcDC.CreateCompatibleDC(pScreenDC);  CBitmap *pOldSrcBmp = SrcDC.SelectObject(&SrcBmp);  BITMAP SrcBmpInfo;    //目标DC  CDC DstDC;  DstDC.CreateCompatibleDC(pScreenDC);  DstBmp.DeleteObject();  DstBmp.CreateCompatibleBitmap(pScreenDC, cx, cy);  CBitmap *pOldDstBmp = DstDC.SelectObject(&DstBmp);   //计算坐标  SrcBmp.GetBitmap(&SrcBmpInfo);  int CopyX = min(cx, SrcBmpInfo.bmWidth);  int CopyY = min(cy, SrcBmpInfo.bmHeight);  int SrcX = (cx > SrcBmpInfo.bmWidth)  ? 0 : (SrcBmpInfo.bmWidth - cx)/2;  int SrcY = (cy > SrcBmpInfo.bmHeight) ? 0 : (SrcBmpInfo.bmHeight - cy)/2;  int DstX = (cx > SrcBmpInfo.bmWidth)  ? (cx - SrcBmpInfo.bmWidth)/2  : 0;  int DstY = (cy > SrcBmpInfo.bmHeight) ? (cy - SrcBmpInfo.bmHeight)/2 : 0;    //填充背景  DstDC.FillSolidRect(0, 0, cx, cy, backColor);  //贴图  DstDC.BitBlt(DstX, DstY, CopyX, CopyY, &SrcDC, SrcX, SrcY, SRCCOPY);    //结束清理工作  DstDC.SelectObject(pOldDstBmp);  DstDC.DeleteDC();    SrcDC.SelectObject(pOldSrcBmp);  SrcDC.DeleteDC();    pScreenDC->DeleteDC();}
[解决办法]
不好意思,我的代码有问题,还是5楼的代码正确。我运行了一下发现我的代码必须改成这样才行。
C/C++ code
CDC memDC;  //在头文件中定义CDC *pDC=GetDC();    CDC bmpDC;    memDC.CreateCompatibleDC(pDC);    bmpDC.CreateCompatibleDC(pDC);    CBitmap bmp;    bmp.LoadBitmap(IDB_BITMAP_NAME);    bmpDC.SelectObject(&bmp);bmp.DeleteObject();bmp.CreateCompatibleBitmap(pDC,1024,1024);memDC.SelectObject(&bmp);memDC.FillSolidRect(0,0,1024,1024,RGB(255,255,255));int xPos=(1024-800)/2;int yPos=(1024-600)/2;memDC.BitBlt(xPos,yPos,800,600,&bmpDC,0,0,SRCCOPY); 

热点排行