100分求教:怎样用VC编写一个程序,能实现读取一个BMP图片,改变大小后,保存为新的BMP图片!

brave_yh 2007-08-13 04:55:22
如题!
...全文
558 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
yesir1006 2007-09-03
  • 打赏
  • 举报
回复
都是DDB啊,怎么感觉用DIB的人这么少呢
red_hope 2007-09-03
  • 打赏
  • 举报
回复
http://www.vckbase.com/document/viewdoc/?id=1440
楼主可以参照这个学习一下啊
个人认为如果不是太急,最好系统学习一下vc++图形图像编程。
低头路过 2007-09-03
  • 打赏
  • 举报
回复
...这个问题。。。
我有 源码 。。。
不知道你 有没有兴趣。
yzh_510 2007-09-03
  • 打赏
  • 举报
回复
最后貌似少了一句BitBlt(dc,
0,0,
bmp.bmWidth*2, bmp.bmHeight*2,
SHDC,
0,0,
SRCCOPY);


哪里有少 我又不需要画到窗体中....下面的保存代码是保存SHDC中的内容

呵呵 没看到你不要保存到窗体, sorry
bukkake 2007-08-29
  • 打赏
  • 举报
回复
帮楼主顶一下
loaad 2007-08-28
  • 打赏
  • 举报
回复
我顶一下,怎么还没有结啊
smallfishff 2007-08-24
  • 打赏
  • 举报
回复
最后貌似少了一句BitBlt(dc,
0,0,
bmp.bmWidth*2, bmp.bmHeight*2,
SHDC,
0,0,
SRCCOPY);


哪里有少 我又不需要画到窗体中....下面的保存代码是保存SHDC中的内容
sparkkendy 2007-08-21
  • 打赏
  • 举报
回复
楼主真富有,这问题也出100分。
你要分多的话分点给我吧:D
yzh_510 2007-08-21
  • 打赏
  • 举报
回复
2楼的读取在StretchBlt(SHDC,0,0,bmp.bmWidth*2,bmp.bmHeight*2,THDC,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);最后貌似少了一句BitBlt(dc,
0,0,
bmp.bmWidth*2, bmp.bmHeight*2,
SHDC,
0,0,
SRCCOPY);
gaoxiaowei 2007-08-13
  • 打赏
  • 举报
回复
学习了
TianChong 2007-08-13
  • 打赏
  • 举报
回复
的确GDI直接搞定
liuxiuk 2007-08-13
  • 打赏
  • 举报
回复
ls的
太pf 你了
---
崇拜一手!
oldn123 2007-08-13
  • 打赏
  • 举报
回复
加我Q270669813
可以帮你现写代码
不过要把分给我:)
kaluobin 2007-08-13
  • 打赏
  • 举报
回复
我有个可以读bmp图片(24位)然后转换为灰度图片的程序,感兴趣的话可以联系:
kaluobinssg@56.com
element_cn 2007-08-13
  • 打赏
  • 举报
回复
没这么复杂,GDI直接就可以,定义一个GDI,读取图片,再缩放保存就行了
very easy
smallfishff 2007-08-13
  • 打赏
  • 举报
回复
如果是程序的附加功能 用VB会比较开明些.

//以下是全代码 测试有效
#include "WINDOWSX.H"

//把以下代码放到一个按钮中 改一下里面的图片路径 还有放大的图片的大小

CClientDC dc(this);//取得客户区内存DC

CDC THDC,SHDC;
HBITMAP THBM,SHBM;
THDC.CreateCompatibleDC(0);//创建相关场景DC
SHDC.CreateCompatibleDC(0);//创建临时场景DC
THBM=(HBITMAP)LoadImage(NULL,"F:\\x.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);//载入位图
BITMAP bmp;
GetObject(THBM,sizeof(bmp),&bmp);//取得位图信息
SelectObject(THDC,THBM);//选入位图至内存DC
DeleteObject(THBM);//删除位图
SHBM=CreateCompatibleBitmap(dc,bmp.bmWidth*2,bmp.bmHeight*2);//临时一个空图形//288*176
SelectObject(SHDC,SHBM);//选入位图至临时DC
DeleteObject(SHBM);//删除位图

StretchBlt(SHDC,0,0,bmp.bmWidth*2,bmp.bmHeight*2,THDC,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);//将临时内存DC中的位图放大一倍后画到临时DC中


//以下是保存临时DC中图形到文件的代码
CDC memDC;
CRect rect(0,0,bmp.bmWidth*2,bmp.bmHeight*2);

//GetClientRect(rect);

memDC.CreateCompatibleDC(&SHDC);
CBitmap bm;
int Width = rect.Width();//
int Height = rect.Height();//
bm.CreateCompatibleBitmap(&SHDC, Width, Height);
CBitmap* pOld = memDC.SelectObject(&bm);
memDC.BitBlt(0, 0, Width, Height, &SHDC, 0, 0, SRCCOPY);
memDC.SelectObject(pOld);
BITMAP btm;
bm.GetBitmap(&btm);
DWORD size = btm.bmWidthBytes * btm.bmHeight;
LPSTR lpData =(LPSTR)GlobalAllocPtr(GPTR, size);
BITMAPFILEHEADER bfh;
/////////////////////////////////////////////
BITMAPINFOHEADER bih;
bih.biBitCount = btm.bmBitsPixel;
bih.biClrImportant = 0;
bih.biClrUsed = 0;
bih.biCompression = 0;
bih.biHeight = btm.bmHeight;
bih.biPlanes = 1;
bih.biSize = sizeof(BITMAPINFOHEADER);
bih.biSizeImage = size;
bih.biWidth = btm.bmWidth;
bih.biXPelsPerMeter = 0;
bih.biYPelsPerMeter = 0;
GetDIBits(dc,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);
bfh.bfReserved1 = bfh.bfReserved2 = 0;
bfh.bfType = ((WORD)('M'<< 8)|'B');
bfh.bfSize = 54 + size;
bfh.bfOffBits = 54;

CFileDialog dlg(false,_T("BMP"),_T("*.bmp"),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("*.bmp|*.bmp|*.*|*.*|"));
if (dlg.DoModal()!=IDOK)
return;

CFile bf;

CString ss=dlg.GetPathName();
if(bf.Open(ss, CFile::modeCreate | CFile::modeWrite))
{
bf.WriteHuge(&bfh, sizeof(BITMAPFILEHEADER));
bf.WriteHuge(&bih, sizeof(BITMAPINFOHEADER));
bf.WriteHuge(lpData, size);
bf.Close();
}
GlobalFreePtr(lpData);
brave_yh 2007-08-13
  • 打赏
  • 举报
回复
要求将352*288象素的BMP图片变成288*176的!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧