CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VC.NET

以VC++。NET为平台,实现BMP格式图片的打开,保存,显示以及BMP转PCX,求代码~~

楼主lxf1984lxf()2006-05-01 15:20:40 在 .NET技术 / VC.NET 提问

以VC++。NET为平台,实现BMP格式图片的打开,保存,显示以及BMP转PCX,求代码  
  那位高人指点一下,或发到我的E-MAIL:  
  lxf1984lxf@yahoo.com.cn 问题点数:100、回复次数:17Top

1 楼lxf1984lxf()回复于 2006-05-01 16:15:58 得分 0

知道的高人请指点一下啊,很急~~~~  
  谢谢了~~~Top

2 楼cainiaoxuefei(萍水相逢,尽是他人之妻)回复于 2006-05-01 17:51:03 得分 0

给钱不?Top

3 楼lxf1984lxf()回复于 2006-05-01 19:50:45 得分 0

要多少啊??Top

4 楼lxf1984lxf()回复于 2006-05-03 11:26:07 得分 0

那个高手指点一下啊   !!!  
  急急急啊~~~~~~~~Top

5 楼ChrisAK(LOLICON)回复于 2006-05-03 14:28:02 得分 0

Bmp打开,显示,保存靠GDI+就OK了..  
  至于那个PCX...  
  恐怕要自己写转换程序了Top

6 楼lxf1984lxf()回复于 2006-05-03 22:38:12 得分 0

问题是必须要用VC++啊~~  
  转换的程序不会啊~~  
  下面是:PCX文件格式  
  ZSoft   PCX   File   Format   Technical   Reference   Manual                  
                   
                   
                   
  Introduction                                                         2    
  Image     File   (.PCX)   Format                               3    
  ZSoft   .PCX   FILE   HEADER   FORMAT                       4    
  Decoding   .PCX   Files                                           6    
  Palette   Information   Description                   7    
  EGA/VGA   16   Color   Palette   Information         7    
  VGA   256   Color   Palette   Information               7    
  24-Bit   .PCX   Files                                               8    
  CGA   Color   Palette   Information                       8    
  CGA   Color   Map                                                       8    
  PC   Paintbrush   Bitmap   Character   Format       9    
  Sample   "C"   Routines                                         10    
  FRIEZE   Technical   Information                       14    
  General   FRIEZE   Information                           14    
  7.00   and   Later   FRIEZE                                     14    
  FRIEZE   Function   Calls                                     15    
  FRIEZE   Error   Codes                                           18    
   
   
   
   
   
  Introduction  
   
  This   booklet   was   designed   to   aid   developers   and   users   in   understanding  
  the   technical   aspects   of   the   .PCX   file   format   and   the   use   of   FRIEZE.  
  Any   comments,   questions   or   suggestions   about   this   booklet   should   be  
  sent   to:  
   
                  ZSoft   Corporation  
                  Technical   Services  
                  ATTN:   Code   Librarian  
                  450   Franklin   Rd.   Suite   100  
                  Marietta,   GA     30067  
   
   
   
  Technical   Reference   Manual   information   compiled   by:  
  Dean   Ansley  
  Top

7 楼lxf1984lxf()回复于 2006-05-03 22:38:42 得分 0

Revision   5  
   
  To   down   load   additional   information   and   the   source   for   a   complete  
  Turbo   Pascal   program   to   show   .PCX   files   on   a   CGA/EGA/VGA   graphics  
  display,   call   our   BBS   at   (404)427-1045.     You   may   use   a   9600   baud    
  modem   or   a   2400   baud   standard   modem.     Your   modem   should   be   set   for  
  8   data   bits,   1   stop   bit,   and   NO   parity.  
   
  Image     File   (.PCX)   Format  
   
  If   you   have   technical   questions   on   the   format,   please   do   not   call  
  technical   support.     ZSoft   provides   this   document   as   a   courtesy   to  
  its   users   and   developers.     It   is   not   the   function   of   Technical   Support  
  to   provide   programming   assistance.     If   something   is   not   clear,   leave   a  
  message   on   our   BBS,   Compuserve,   or   write   us   a   letter   at   the   above   address.  
   
  The   information   in   this   section   will   be   useful   if   you   want   to   write   a  
  program   to   read   or   write   PCX   files   (images).     If   you   want   to   write   a  
  special   case   program   for   one   particular   image   format   you   should   be   able  
  to   produce   something   that   runs   twice   as   fast   as   "Load   from..."   in  
  PC   Paintbrush.      
   
  Image   files   used   by   PC   Paintbrush   product   family   and   FRIEZE   (those   with   a  
  .PCX   extension)   begin   with   a   128   byte   header.     Usually   you   can   ignore   this  
  header,   since   your   images   will   probably   all   have   the   same   resolution.     If  
  you   want   to   process   different   resolutions   or   colors,   you   will   need   to  
  interpret   the   header   correctly.     The   remainder   of   the   image   file   consists  
  of   encoded   graphic   data.     The   encoding   method   is   a   simple   byte   oriented  
  run-length   technique.     We   reserve   the   right   to   change   this   method   to  
  improve   space   efficiency.     When   more   than   one   color   plane   is   stored   in  
  the   file,   each   line   of   the   image   is   stored   by   color   plane   (generally   ordered  
  red,   green,   blue,   intensity),   As   shown   below.  
   
  Scan   line   0:                   RRR...                 (Plane   0)  
                                            GGG...                 (Plane   1)  
                                            BBB...                 (Plane   2)  
                                            III...                 (Plane   3)  
  Scan   line   1:                   RRR...  
                                            GGG...  
                                            BBB...  
                                            III...                 (etc.)  
   
  The   encoding   method   is:  
          FOR     each     byte,     X,     read   from   the   file  
                  IF   the   top   two   bits   of   X   are     1's   then  
                          count   =   6   lowest   bits   of   X  
                          data   =   next   byte   following   X  
                  ELSE  
                          count   =   1  
                          data   =   X  
   
  Since   the   overhead   this   technique   requires   is,   on   average,     25%   of  
  the   non-repeating   data   and   is   at   least   offset   whenever   bytes   are   repeated,  
  the   file   storage   savings   are   usually   considerable.  
   
  ZSoft   .PCX   FILE   HEADER   FORMAT  
   
  Byte             Item                     Size       Description/Comments    
  0                   Manufacturer   1             Constant   Flag,   10   =   ZSoft   .pcx    
  1                   Version             1             Version   information    
                                                                0   =   Version   2.5   of   PC   Paintbrush    
                                                                2   =   Version   2.8   w/palette   information    
                                                                3   =   Version   2.8   w/o   palette   information    
                                                                4   =   PC   Paintbrush   for   Windows(Plus   for  
                                                                      Windows   uses   Ver   5)    
                                                                5   =   Version   3.0   and   >   of   PC   Paintbrush  
                                                                      and   PC   Paintbrush   +,   includes  
                                                                      Publisher's   Paintbrush   .   Includes  
                                                                      24-bit   .PCX   files    
  2                   Encoding             1           1   =   .PCX   run   length   encoding    
  3                   BitsPerPixel     1           Number   of   bits   to   represent   a   pixel  
                                                                      (per   Plane)   -   1,   2,   4,   or   8    
  4                   Window                 8           Image   Dimensions:   Xmin,Ymin,Xmax,Ymax    
  12                   HDpi                     2           Horizontal   Resolution   of   image   in   DPI*    
  14                   VDpi                     2           Vertical   Resolution   of   image   in   DPI*    
  16                   Colormap           48           Color   palette   setting,   see   text    
  64                   Reserved             1           Should   be   set   to   0.    
  65                   NPlanes               1           Number   of   color   planes    
  66                   BytesPerLine     2           Number   of   bytes   to   allocate   for   a   scanline  
                                                                      plane.     MUST   be   an   EVEN   number.     Do   NOT  
                                                                      calculate   from   Xmax-Xmin.    
  68                   PaletteInfo       2           How   to   interpret   palette-   1   =   Color/BW,  
                                                                      2   =   Grayscale   (ignored   in   PB   IV/   IV   +)    
  70                   HscreenSize       2           Horizontal   screen   size   in   pixels.   New   field  
                                                                      found   only   in   PB   IV/IV   Plus    
  72                   VscreenSize       2           Vertical   screen   size   in   pixels.   New   field  
                                                                      found   only   in   PB   IV/IV   Plus    
  74                   Filler               54           Blank   to   fill   out   128   byte   header.     Set   all  
                                                                      bytes   to   0    
  Top

8 楼lxf1984lxf()回复于 2006-05-03 22:39:16 得分 0

NOTES:  
   
  All   sizes   are   measured   in   BYTES.    
   
  All   variables   of   SIZE   2   are   integers.      
   
  *HDpi   and   VDpi   represent   the   Horizontal   and   Vertical   resolutions   which   the  
  image   was   created   (either   printer   or   scanner);   i.e.   an   image   which   was  
  scanned   might   have   300   and   300   in   each   of   these   fields.  
   
  Decoding   .PCX   Files  
   
  First,   find   the   pixel   dimensions   of   the   image   by   calculating  
  [XSIZE   =   Xmax   -   Xmin   +   1]   and   [YSIZE   =   Ymax   -   Ymin   +   1].     Then   calculate  
  how   many   bytes   are   required   to   hold   one   complete   uncompressed   scan   line:  
   
  TotalBytes   =   NPlanes   *   BytesPerLine  
   
  Note   that   since   there   are   always   an   even   number   of   bytes   per   scan   line,  
  there   will   probably   be   unused   data   at   the   end   of   each   scan   line.     TotalBytes  
  shows   how   much   storage   must   be   available   to   decode   each   scan   line,   including  
  any   blank   area   on   the   right   side   of   the   image.     You   can   now   begin   decoding  
  the   first   scan   line   -   read   the   first   byte   of   data   from   the   file.     If   the  
  top   two   bits   are   set,   the   remaining   six   bits   in   the   byte   show   how   many   times  
  to   duplicate   the   next   byte   in   the   file.     If   the   top   two   bits   are   not   set,  
  the   first   byte   is   the   data   itself,   with   a   count   of   one.  
   
  Continue   decoding   the   rest   of   the   line.     Keep   a   running   subtotal   of   how  
  many   bytes   are   moved   and   duplicated   into   the   output   buffer.     When   the  
  subtotal   equals   TotalBytes,   the   scan   line   is   complete.     There   should   always  
  be   a   decoding   break   at   the   end   of   each   scan   line.     But   there   will   not   be   a  
  decoding   break   at   the   end   of   each   plane   within   each   scan   line.     When   the  
  scan   line   is   completed,   there   may   be   extra   blank   data   at   the   end   of   each  
  plane   within   the   scan   line.     Use   the   XSIZE   and   YSIZE   values   to   find   where  
  the   valid   image   data   is.     If   the   data   is   multi-plane,   BytesPerLine   shows  
  where   each   plane   ends   within   the   scan   line.  
   
  Continue   decoding   the   remainder   of   the   scan   lines   (do   not   just   read   to  
  end-of-file).     There   may   be   additional   data   after   the   end   of   the   image  
  (palette,   etc.)  
   
  Palette   Information   Description  
   
  EGA/VGA   16   Color   Palette   Information  
   
  In   standard   RGB   format   (IBM   EGA,   IBM   VGA)   the   data   is   stored   as   16   triples.  
  Each   triple   is   a   3   byte   quantity   of   Red,   Green,   Blue   values.     The   values   can  
  range   from   0-255,   so   some   interpretation   may   be   necessary.     On   an   IBM   EGA,  
  for   example,   there   are   4   possible   levels   of   RGB   for   each   color.     Since  
  256/4   =   64,   the   following   is   a   list   of   the   settings   and   levels:  
   
  Setting                                 Level  
        0-63                                 0  
  64-127                                 1  
  128-192                                 2  
  193-254                                 3  
   
  VGA   256   Color   Palette   Information  
   
  ZSoft   has   recently   added   the   capability   to   store   palettes   containing   more  
  than   16   colors   in   the   .PCX   image   file.     The   256   color   palette   is   formatted  
  and   treated   the   same   as   the   16   color   palette,   except   that   it   is   substantially  
  longer.     The   palette   (number   of   colors   x   3   bytes   in   length)   is   appended   to  
  the   end   of   the   .PCX   file,   and   is   preceded   by   a   12   decimal.     Since   the   VGA  
  device   expects   a   palette   value   to   be   0-63   instead   of   0-255,   you   need   to  
  divide   the   values   read   in   the   palette   by   4.  
   
  To   access   a   256   color   palette:  
   
  First,   check   the   version   number   in   the   header;   if   it   contains   a   5   there   is  
  a   palette.  
   
  Second,   read   to   the   end   of   the   file   and   count   back   769   bytes.     The   value  
  you   find   should   be   a   12   decimal,   showing   the   presence   of   a   256   color   palette.  
   
  24-Bit   .PCX   Files  
   
  24   bit   images   are   stored   as   version   5   or   above   as   8   bit,   3   plane   images.  
   
  24   bit   images   do   not   contain   a   palette.  
   
  Bit   planes   are   ordered   as   lines   of   red,   green,   blue   in   that   order.  
   
  CGA   Color   Palette   Information  
   
  NOTE:   This   is   no   longer   supported   for   PC   Paintbrush   IV/IV   Plus.  
   
  For   a   standard   IBM   CGA   board,   the   palette   settings   are   a   bit   more   complex.  
  Only   the   first   byte   of   the   triple   is   used.     The   first   triple   has   a   valid  
  first   byte   which   represents   the   background   color.     To   find   the   background,  
  take   the   (unsigned)   byte   value   and   divide   by   16.     This   will   give   a   result  
  between   0-15,   hence   the   background   color.     The   second   triple   has   a   valid  
  first   byte,   which   represents   the   foreground   palette.     PC   Paintbrush   supports  
  8   possible   CGA   palettes,   so   when   the   foreground   setting   is   encoded   between  
  0   and   255,   there   are   8   ranges   of   numbers   and   the   divisor   is   32.  
  Top

9 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-05-04 00:26:46 得分 0

www.codeproject.com/bitmap/cximage.aspTop

10 楼lxf1984lxf()回复于 2006-05-10 20:05:01 得分 0

难到没人给个具体点的么??  
  愚昧~~~Top

11 楼leon1983()回复于 2006-05-18 20:21:10 得分 0

急   求求那位大哥了啊Top

12 楼wawowawoo()回复于 2006-05-18 22:39:17 得分 0

帮顶Top

13 楼candlelight(candlelight)回复于 2006-05-20 16:45:20 得分 0

无聊,写了个打开bmp的程序,一下是核心代码:  
  void   CViewBmpDlg::OnOpen()    
  {  
  //   TODO:   Add   your   control   notification   handler   code   here  
  CFileDialog   file(TRUE);  
  if(!file.DoModal())  
  return;  
  HANDLE   hFile=::CreateFile(file.GetFileName(),GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);  
  if(hFile==INVALID_HANDLE_VALUE)  
  {  
  ::AfxMessageBox(_T("读取文件出错!"));  
  return;  
  }  
  //创建内存映射对象  
  HANDLE   hMap=::CreateFileMapping(hFile,NULL,PAGE_READONLY,NULL,NULL,NULL);  
  LPVOID   lpBase=::MapViewOfFile(hMap,FILE_MAP_READ,0,0,0);  
  BITMAPFILEHEADER   *pFileHeader;  
  BITMAPINFO   *pInfoHeader;  
  pFileHeader=(BITMAPFILEHEADER*)   lpBase;  
  if(pFileHeader->bfType!=MAKEWORD('B','M'))  
  {  
  ::AfxMessageBox(_T("不是bmp文件,请重新选择!^_^"));  
  ::UnmapViewOfFile(lpBase);  
  ::CloseHandle(hMap);  
  ::CloseHandle(hFile);  
  return;  
  }  
  BYTE   *pBits=(BYTE   *)lpBase+pFileHeader->bfOffBits;  
  pInfoHeader=(BITMAPINFO   *)((BYTE   *)lpBase+sizeof(BITMAPFILEHEADER));  
  m_nHeight=pInfoHeader->bmiHeader.biHeight;  
  m_nWidth=pInfoHeader->bmiHeader.biWidth;  
  CClientDC   dc(this);  
  HBITMAP   hBitMap=::CreateCompatibleBitmap(dc,m_nWidth,m_nHeight);  
  ::SelectObject(m_hMemDC,hBitMap);  
  int   nRet=::SetDIBitsToDevice(m_hMemDC,  
  0,  
  0,  
  m_nWidth,  
  m_nHeight,  
  0,  
  0,  
  0,  
  m_nHeight,  
  pBits,  
  pInfoHeader,  
  DIB_RGB_COLORS);  
  ::InvalidateRect(m_hWnd,NULL,TRUE);  
  ::DeleteObject(hBitMap);  
  ::UnmapViewOfFile(lpBase);  
  ::CloseHandle(hMap);  
  ::CloseHandle(hFile);  
  }  
  Top

14 楼candlelight(candlelight)回复于 2006-05-20 16:46:25 得分 0

保存的应该不是好难  
  上面用的是内存映射显示bmp文件Top

15 楼renjwjx(神刀)回复于 2006-05-24 14:15:09 得分 0

我这里有个<图像编程>书的光盘,上面的程序不错,不知你要哪一块啊?  
  说详细点啊,  
  renjwjx@163.comTop

16 楼Muf(沐枫)回复于 2006-05-24 21:37:39 得分 0

抄书的好多啊。  
   
  Image*   img   =   Image::FromFile("c:\\test.bmp");  
  Graphics*   g   =   Graphics::FromHDC(dc);  
  g.DrawImage(img,   0,   0);  
   
  ...  
  img->Save("C:\\test.pcx");Top

17 楼Muf(沐枫)回复于 2006-05-24 21:37:56 得分 0

Using   GDI+Top

相关问题

关键词

得分解答快速导航

  • 帖主:lxf1984lxf

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

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