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

8位彩图灰度化可不可以只改调色板

楼主mengxiang2003(blog.sina.com.cn/fantasyfly)2005-04-02 16:15:30 在 VC/MFC / 图形处理/算法 提问

if(bi.biBitCount=8)  
  {  
  for(i=0;i<256;i++)  
  {  
                    BYTE   blue=(quad+i)->rgbBlue;  
  BYTE   green=(quad+i)->rgbGreen;  
  BYTE   red=(quad+i)->rgbRed;  
  BYTE   gray   =   (red   *   30   +   green   *   59   +   blue   *   11)   /   100;  
  (quad+i)->rgbBlue=(BYTE)i;  
  (quad+i)->rgbGreen=(BYTE)i;  
  (quad+i)->rgbRed=(BYTE)i;  
  }  
  } 问题点数:0、回复次数:11Top

1 楼mengxiang2003(blog.sina.com.cn/fantasyfly)回复于 2005-04-02 16:16:36 得分 0

忘了,这一句应该去掉。BYTE   gray   =   (red   *   30   +   green   *   59   +   blue   *   11)   /   100;  
   
  Top

2 楼sxshao(sxshao)回复于 2005-04-02 16:29:19 得分 0

八位彩图灰度化可以只改调色板,  
         ——  
  看你如何定义和检验256灰度的了,要是严格检查调色板的话就不行。Top

3 楼mengxiang2003(blog.sina.com.cn/fantasyfly)回复于 2005-04-02 18:01:06 得分 0

sxshao(邵世鑫)   :不好意思,你能不能说的详细点,我不太明白Top

4 楼huanyun(无妻徒刑)回复于 2005-04-02 22:46:03 得分 0

if(bi.biBitCount=8)  
  {  
  for(i=0;i<256;i++)  
  {  
                    BYTE   blue=(quad+i)->rgbBlue;  
  BYTE   green=(quad+i)->rgbGreen;  
  BYTE   red=(quad+i)->rgbRed;  
  BYTE   gray   =   (red   *   30   +   green   *   59   +   blue   *   11)   /   100;  
  (quad+i)->rgbBlue=gray   ;  
  (quad+i)->rgbGreen=gray   ;  
  (quad+i)->rgbRed=gray   ;  
  }  
  }  
  Top

5 楼KarlYung(Karl)回复于 2005-04-04 09:04:08 得分 0

当然可以!  
  int   MaxColors   =   imgOriginal.GetMaxColorTableEntries();  
  RGBQUAD*   ColorTable;  
  ColorTable   =   new   RGBQUAD[MaxColors];  
   
  imgOriginal.GetColorTable(0,MaxColors,ColorTable);  
  for   (int   i=0;   i<MaxColors;   i++)  
  {  
  int   avg   =   (ColorTable[i].rgbBlue   +   ColorTable[i].rgbGreen   +   ColorTable[i].rgbRed)/3;  
  ColorTable[i].rgbBlue   =   (BYTE)avg;  
  ColorTable[i].rgbGreen   =   (BYTE)avg;  
  ColorTable[i].rgbRed   =   (BYTE)avg;  
  }  
  imgOriginal.SetColorTable(0,MaxColors,ColorTable);  
  delete(ColorTable);Top

6 楼nicfeng(石头)回复于 2005-04-04 12:59:36 得分 0

把rgb调色板索引   改成gray索引就行了  
  Top

7 楼sxshao(sxshao)回复于 2005-04-07 10:29:36 得分 0

八位彩图灰度化可以只改调色板,  
         ——  
  看你如何定义和检验256灰度的了,要是严格检查调色板的话就不行。  
  //  
  //    
  比如:  
  //创建256色灰度调色板  
  for(   i   =   0;   i   <   j;   i++   )  
  {  
  pNewRGBPalette[i].rgbRed   =   i;  
  pNewRGBPalette[i].rgbGreen   =   i;  
  pNewRGBPalette[i].rgbBlue   =   i;  
  }  
  //  
  以后图像处理时就不用查调色板了。  
  //  
  //   统计  
  for   (   y   =   nY   *   _TileYStep;   y   <   (nY+1)   *   _TileYStep;   y++   )  
  {  
  //数据指针定位到图像数据每行的起始零位置  
  pTemp   =_p256g   +   ((   _YHeight   -   1   -   y)   *   _nWidthBytes);  
  for   (   x   =   nX   *   _TileXStep   ;   x   <   (nX+1)   *   _TileXStep;   x++)  
  {  
  if   (pTemp[x]   ==   0)  
  {  
  _pTilePixel[nI]++;  
  }  
  }  
  }  
   
  //Top

8 楼sxshao(sxshao)回复于 2005-04-07 10:36:58 得分 0

如果偷懒八位彩图灰度化仅仅改调色板,  
  之后的图像处理还是要查调色板,  
  效率不高。  
   
  一般来说,应严格定义和检验256灰度。  
  Top

9 楼hhoking(妙手仁心)回复于 2005-04-08 10:10:16 得分 0

效率问题嘛,如果想做通用函数(比如,不管8位是灰度还是彩色),效率已经损失了,所以也没什么影响。Top

10 楼kunlunlang(啊庸)回复于 2005-04-09 03:54:54 得分 0

不过这样灰化的效果不好Top

11 楼mengxiang2003(blog.sina.com.cn/fantasyfly)回复于 2005-04-10 19:48:05 得分 0

谢谢各位,我决定把24位的彩色图转化成8位的灰度图,创建一个调色板  
  for(i=0;i<256;i++)  
  {  
  (quad+i)->rgbBlue=(BYTE)i;  
  (quad+i)->rgbGreen=(BYTE)i;  
  (quad+i)->rgbRed=(BYTE)i;  
  }  
  然后把像素重新赋值gray.这样以后就不用管调色板了。Top

相关问题

  • 在显示8位灰度时,怎样来调用调色板?
  • 可不可以?
  • 24bit的bmp文件怎么通过调色板转换成灰度
  • 灰度图象和256 色图象有什么区别,灰度图象有调色板么?
  • 256色灰度DIB位图的调色板,在MFC里面怎么创建,是不是CPalette ?
  • 怎么把彩图变灰度图?
  • *****调色板******
  • 调色板
  • 可不可以同时学?
  • ISDN可不可以用PCANYWHERE?

关键词

  • quad+
  • 调色板
  • 灰度
  • rgbgreen
  • rgbblue
  • rgbred
  • gray
  • colortable
  • maxcolors
  • green

得分解答快速导航

  • 帖主:mengxiang2003

相关链接

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

广告也精彩

反馈

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