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

结果应该是灰度图才对啊,怎么显示的图像里居然只有纯黑 纯白,还有....蓝色 ,急!!!!,哪位大虾救救阿,我已经被它折磨三天了

楼主gyj86(guo)2006-05-04 07:03:28 在 VC/MFC / 图形处理/算法 提问

定义了这么一个彩色表  
  m_Quad=new   RGBQUAD[NumberOfColors];  
  for(int   j=0;j<256;j++)  
  {  
  m_Quad[j].rgbBlue=(unsigned   char)j;  
  m_Quad[j].rgbGreen=(unsigned   char)j;  
  m_Quad[j].rgbRed=(unsigned   char)j;  
  m_Quad[j].rgbReserved=0;  
  }  
   
  然后创建调色板:  
  //创建调色板:  
  BOOL   CDib::CreatePalette()  
  {  
  if(m_BmpInfo==0)  
  {  
  return   FALSE;  
  }  
  if(BPP>=16)  
  {  
  return   TRUE;  
  }  
  DWORD   i;  
  //allocate   memory   block   for   logical   palette  
  LPLOGPALETTE   lpPal=(LPLOGPALETTE)new   BYTE[sizeof(LOGPALETTE)+  
  sizeof(PALETTEENTRY)  
  *NumberOfColors];  
  //if   not   enough   memory,clean   up   and   return   NULL  
  if(lpPal==0)  
  {  
  return   FALSE;  
  }  
  //set   version   and   number   of   palette   entries  
  lpPal->palVersion=PALVERSION;  
  lpPal->palNumEntries=(WORD)NumberOfColors;  
  for(i=0;i<NumberOfColors;i++)  
  {  
  lpPal->palPalEntry[i].peRed   =   m_Quad[i].rgbRed;  
  lpPal->palPalEntry[i].peGreen   =   m_Quad[i].rgbGreen;  
  lpPal->palPalEntry[i].peBlue   =   m_Quad[i].rgbBlue;  
  lpPal->palPalEntry[i].peFlags   =   0;  
  }  
  /*create   the   palette   and   get   handle   to   it*/  
  if(m_hPal)  
  {  
  ::DeleteObject((HGDIOBJ)m_hPal);  
  }  
  m_hPal=::CreatePalette(lpPal);  
  if(!m_hPal)  
  {  
  return   FALSE;  
  }  
  delete   []   lpPal;  
  return   TRUE;  
  }  
  最后把它画出来  
  BOOL   CDib::Draw(HDC   hDC,LPRECT   rcDest,LPRECT   rcSrc)  
  {  
  if(!m_BmpLoaded)  
  {  
  return   FALSE;  
  }  
  HPALETTE   hOldPal   =   0;//旧调色板;  
  //获取DIB的调色板,然后将其选入设备环境:  
  if(m_hPal!=0)  
  {  
  hOldPal   =   ::SelectPalette(hDC,m_hPal,TRUE);  
  }  
  //使用最适合于颜色位图的显示方式:  
  ::SetStretchBltMode(hDC,COLORONCOLOR);  
  //确定是使用StretchDIBits()还是SetDIBits   To   Device():  
  BOOL   Ok;  
  if((RECTWIDTH(rcDest)   ==   RECTWIDTH(rcSrc))&&  
  (RECTHEIGHT(rcDest)   ==   RECTHEIGHT(rcSrc)))  
  {  
  Ok=::SetDIBitsToDevice(hDC,//hDC  
  rcDest-  
  >left,//DestX  
  rcDest-  
  >top,//DestY  
  RECTWIDTH  
  (rcDest),//nDestWidth  
  RECTHEIGHT  
  (rcDest),//nDestHeight  
  rcSrc-  
  >left,//nDestHeight  
  Height-rcSrc-  
  >top-RECTHEIGHT(rcSrc),//SrcY  
   
  0,//nStartScan  
  (WORD)  
  Height,//nNumScans  
   
  m_Buffer,//lpBits  
   
  m_BmpInfo,//lpBitsInfo  
   
  DIB_RGB_COLORS//wUsage  
  );  
  }  
  else  
  {  
  Ok=::StretchDIBits(hDC,//hDC  
  rcDest->left,//DestX  
  rcDest->top,//DestY  
  RECTWIDTH  
  (rcDest),//nDestWidth  
  RECTHEIGHT  
  (rcDest),//nDestHeight  
  rcSrc->left,//SrcX  
  rcSrc->top,//SrcY  
  RECTWIDTH  
  (rcSrc),//wSrcWidth  
  RECTHEIGHT  
  (rcSrc),//wSrcHeight  
  m_Buffer,//lpBits  
   
  m_BmpInfo,//lpBitsInfo  
   
  DIB_RGB_COLORS,//wUsage  
  SRCCOPY   //dwROP  
  );  
  }  
  /*Reselect   old   palette*/  
  if(hOldPal!=0)  
  {  
  ::SelectPalette(hDC,hOldPal,TRUE);  
  }  
  return   Ok;  
  }  
   
  结果应该是灰度图才对啊,怎么显示的图像里居然只有纯黑   纯白,还有....蓝色  
  (晕)   ,哪位大虾救救阿,我已经被它折磨三天了  
  问题点数:100、回复次数:3Top

1 楼yoogle(离谱)回复于 2006-05-04 08:10:07 得分 15

for(i=0;i<NumberOfColors;i++)  
  {  
  lpPal->palPalEntry[i].peRed   =   m_Quad[i].rgbRed;  
  lpPal->palPalEntry[i].peGreen   =   m_Quad[i].rgbGreen;  
  lpPal->palPalEntry[i].peBlue   =   m_Quad[i].rgbBlue;  
  lpPal->palPalEntry[i].peFlags   =   0;  
  }  
  /*create   the   palette   and   get   handle   to   it*/  
  if(m_hPal)  
  {  
  ::DeleteObject((HGDIOBJ)m_hPal);  
  }  
  m_hPal=::CreatePalette(lpPal);  
  ----------------------  
  你赋值给lpPal,但是用的却是m_hPal.这里是问题吧?Top

2 楼yoogle(离谱)回复于 2006-05-04 08:14:03 得分 0

阿,我看错了,sorrry.Top

3 楼jszj(老板说mis部不是赚钱的部门...)回复于 2006-05-04 10:11:03 得分 85

觉得是   m_BmpInfo   的问题,这里面的调色板你没有换,所以显示的图象是你的   这个图象而不是你创建   的调色板的那个图象Top

相关问题

关键词

得分解答快速导航

  • 帖主:gyj86
  • yoogle
  • jszj

相关链接

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

广告也精彩

反馈

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