CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  图形处理/算法

(毕业设计) 急急!!位图操作

楼主huxiaoyong1985(小小)2004-05-04 20:39:57 在 VC/MFC / 图形处理/算法 提问

我想做一个对位图操作的工程  
  1:从硬盘中读取位图文件  
  2:向位图文件写些文字     ,比如“I     LOVE     YOU!”  
  3:   保存修改后的位图文件,按原路径  
                          各位大哥大姐,救救我吧!  
            初学vc,最好要有容易的代码  
                          huxiaoyong1983@163.com 问题点数:0、回复次数:14Top

1 楼clife(笨狗API.NET)回复于 2004-05-05 06:07:15 得分 0

还是看看书吧,这个很简单啊.  
  读文件自己看看位图结构解析一下就可以了  
  要么就用LoadImage  
  写文字用TextOutTop

2 楼FengYuanMSFT((6.4 被封杀)袁峰 http://fengyuancom.spaces.live.com)回复于 2004-05-05 06:07:29 得分 0

Lots   of   code   in   http://safariexamples.informit.com/0130869856/Top

3 楼jsphuang(建设者)回复于 2004-05-05 09:36:55 得分 0

1.XP  
  2.vc6+GDI+(或者.NET);Top

4 楼swbreath(雪白呼嘘())回复于 2004-05-05 11:12:14 得分 0

1:LoadImage读取文件  
  2:创建内存DC,在内存DC上选择进入位图,然后再内存DC上TextOut  
  3:把位图替换下来,保存Top

5 楼wwwllg(野蛮人)回复于 2004-05-05 11:14:23 得分 0

1:LoadImage读取文件  
  2:创建内存DC,在内存DC上选择进入位图,然后再内存DC上TextOut  
  3:把位图替换下来,保存  
  ----------------------------  
  和我想的一样。呵呵。  
  swbreath(雪白呼嘘)   觉得你vc是高手。Top

6 楼swbreath(雪白呼嘘())回复于 2004-05-05 11:19:55 得分 0

 
  BOOL   SaveBmp(HBITMAP   hBitmap,   CString   FileName)  
  {  
  HDC   hDC;  
  //当前分辨率下每象素所占字节数  
  int   iBits;  
  //位图中每象素所占字节数  
  WORD   wBitCount;  
  //定义调色板大小,   位图中像素字节大小   ,位图文件大小   ,   写入文件字节数    
  DWORD   dwPaletteSize=0,   dwBmBitsSize=0,   dwDIBSize=0,   dwWritten=0;    
  //位图属性结构    
  BITMAP   Bitmap;      
  //位图文件头结构  
  BITMAPFILEHEADER   bmfHdr;      
  //位图信息头结构    
  BITMAPINFOHEADER   bi;      
  //指向位图信息头结构      
  LPBITMAPINFOHEADER   lpbi;      
  //定义文件,分配内存句柄,调色板句柄    
  HANDLE   fh,   hDib,   hPal,hOldPal=NULL;    
   
  //计算位图文件每个像素所占字节数    
  hDC   =   CreateDC("DISPLAY",   NULL,   NULL,   NULL);  
  iBits   =   GetDeviceCaps(hDC,   BITSPIXEL)   *   GetDeviceCaps(hDC,   PLANES);    
  DeleteDC(hDC);    
  if   (iBits   <=   1) wBitCount   =   1;    
  else   if   (iBits   <=   4)   wBitCount   =   4;    
  else   if   (iBits   <=   8)   wBitCount   =   8;    
  else   wBitCount   =   24;    
   
  GetObject(hBitmap,   sizeof(Bitmap),   (LPSTR)&Bitmap);  
  bi.biSize =   sizeof(BITMAPINFOHEADER);  
  bi.biWidth =   Bitmap.bmWidth;  
  bi.biHeight =   Bitmap.bmHeight;  
  bi.biPlanes =   1;  
  bi.biBitCount =   wBitCount;  
  bi.biCompression =   BI_RGB;  
  bi.biSizeImage =   0;  
  bi.biXPelsPerMeter =   0;  
  bi.biYPelsPerMeter =   0;  
  bi.biClrImportant =   0;  
  bi.biClrUsed =   0;  
   
  dwBmBitsSize   =   ((Bitmap.bmWidth   *   wBitCount   +   31)   /   32)   *   4   *   Bitmap.bmHeight;  
   
  //为位图内容分配内存    
  hDib   =   GlobalAlloc(GHND,dwBmBitsSize   +   dwPaletteSize   +   sizeof(BITMAPINFOHEADER));    
  lpbi   =   (LPBITMAPINFOHEADER)GlobalLock(hDib);    
  *lpbi   =   bi;    
   
  //   处理调色板      
  hPal   =   GetStockObject(DEFAULT_PALETTE);    
  if   (hPal)    
  {    
  hDC   =   ::GetDC(NULL);    
  hOldPal   =   ::SelectPalette(hDC,   (HPALETTE)hPal,   FALSE);    
  RealizePalette(hDC);    
  }  
   
  //   获取该调色板下新的像素值    
  GetDIBits(hDC,   hBitmap,   0,   (UINT)   Bitmap.bmHeight,   (LPSTR)lpbi   +   sizeof(BITMAPINFOHEADER)    
  +dwPaletteSize, (BITMAPINFO   *)lpbi,   DIB_RGB_COLORS);    
   
  //恢复调色板      
  if   (hOldPal)    
  {    
  ::SelectPalette(hDC,   (HPALETTE)hOldPal,   TRUE);    
  RealizePalette(hDC);    
  ::ReleaseDC(NULL,   hDC);    
  }    
   
  //创建位图文件      
  fh   =   CreateFile(FileName,   GENERIC_WRITE,0,   NULL,   CREATE_ALWAYS,    
  FILE_ATTRIBUTE_NORMAL   |   FILE_FLAG_SEQUENTIAL_SCAN,   NULL);    
   
  if   (fh   ==   INVALID_HANDLE_VALUE)     return   FALSE;    
   
  //   设置位图文件头    
  bmfHdr.bfType   =   0x4D42;   //   "BM"    
  dwDIBSize   =   sizeof(BITMAPFILEHEADER)   +   sizeof(BITMAPINFOHEADER)   +   dwPaletteSize   +   dwBmBitsSize;      
  bmfHdr.bfSize   =   dwDIBSize;    
  bmfHdr.bfReserved1   =   0;    
  bmfHdr.bfReserved2   =   0;    
  bmfHdr.bfOffBits   =   (DWORD)sizeof(BITMAPFILEHEADER)   +   (DWORD)sizeof(BITMAPINFOHEADER)   +   dwPaletteSize;    
  //   写入位图文件头    
  WriteFile(fh,   (LPSTR)&bmfHdr,   sizeof(BITMAPFILEHEADER),   &dwWritten,   NULL);    
  //   写入位图文件其余内容    
  WriteFile(fh,   (LPSTR)lpbi,   dwDIBSize,   &dwWritten,   NULL);    
  //清除      
  GlobalUnlock(hDib);    
  GlobalFree(hDib);    
  CloseHandle(fh);    
   
  return   TRUE;  
  }  
   
   
  上面是保存位图的,至于内存DC中替换位图的事情就非常好做了  
  首先创建一个设备兼容DC,然后创建一个设备兼容位图,然后把位图选择进入内存DC,然后再把图形绘制在内存DC上,然后再用旧的位图把这个选择进来的位图替换下来,然后再把位图保存为文件Top

7 楼swbreath(雪白呼嘘())回复于 2004-05-05 11:53:09 得分 0

回复人:   wwwllg(wwwllg)   (   )    
  ________________________________________  
  hoho,俺还要努力……,我只会一些表面的东东Top

8 楼jia20003(『gloomy fish』兄弟们一个一个结婚刺激我想跳楼!)回复于 2004-05-05 13:33:13 得分 0

毕业设计做这个,简单了吧!Top

9 楼puhuofeie(扑火飞蛾)回复于 2004-05-05 20:31:15 得分 0

http://expert.csdn.net/Expert/topic/3018/3018876.xml?temp=7.497805E-02Top

10 楼bluebohe(薄荷)回复于 2004-05-06 11:53:12 得分 0

 
  3:加载一个位图文件  
  HBITMAP   hbitmap=(HBITMAP)LoadImage(0,strFileName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);  
   
   
  Top

11 楼bluebohe(薄荷)回复于 2004-05-06 11:56:50 得分 0

CBitmap   m_bmp;  
  CDC   m_MemDC;  
  HBITMAP   hbitmap=(HBITMAP)LoadImage(0,"g:\\tzg.bmp",IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);  
   
  m_MemDC.CreateCompatibleDC   (NULL);  
  m_bmp.Attach(hbitmap);  
  CBitmap   *pBitmap=(CBitmap   *)m_MemDC.SelectObject(&m_bmp);  
   
  //m_MemDC.TextOut()……  
   
  m_MemDC.SelectObject(pBitmap);  
  SaveBmp(m_bmp,"E:\\tzg.bmp");  
  m_bmp.Detach();  
   
  m_MemDC.DeleteDC();  
  Top

12 楼bugzhao(阿辉)回复于 2004-05-06 12:44:51 得分 0

毕业设计。。。。Top

13 楼_foo(莫依[双双朵朵])回复于 2004-05-06 12:47:33 得分 0

http://www.vckbase.com/document/viewdoc/?id=1106Top

14 楼huxiaoyong1985(小小)回复于 2004-05-06 15:43:04 得分 0

谢谢了Top

相关问题

  • 毕业设计急用!急!急!急!
  • 有没有人用dev/2000做图形连接问题,急急急急急急级!毕业设计!!
  • 我的毕业设计,请高手指点迷津。急 急 急 急 急 急~~~~~~~~~~~~~`
  • linux下的web服务器配置。毕业设计用。急,急,急………(分多多)
  • 毕业设计求助关于图片显示
  • 毕业设计
  • 毕业设计毕业设计毕业设计毕业设计毕业设计毕业设计毕业设计毕业设计毕业设计毕业设计毕业设计毕业设计毕业设计毕业设计毕业设计毕业设计
  • 毕业设计
  • 急!!急!!急!!毕业设计出问题了!!!!!没有几天时间就要答辩了!!!!!!!!
  • 毕业设计 利用整型的dct变换对数字图像压缩

关键词

  • 文件
  • 内存
  • 结构
  • dc
  • vc
  • null
  • 图
  • ibits
  • 内存dc
  • hdc

得分解答快速导航

  • 帖主:huxiaoyong1985

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo