我使用的是Visual c++6。0技术内幕里提供的类CDib来操作位图,最好提供可以两个独立的函数来分辨别实现着俩个功能。他们可以作为CDib类的成员函数来使用。类似下面的这个就可以,我用了下面的这个,但是下面这个不好用,处理后的图象有许多问题,不能实现灰度化。

/*

此函数实现由24位的bmp到256色灰度图的转换

*/

CDib& CDib::RgbToGray()

{

//判断dibFile是有效的24位真彩色位图

if(m_lpBMIH->biBitCount==24 && m_nColorTableEntries==0 && m_lpBMIH->biCompression==BI_RGB)//是真彩色位图

{//先只处理扩展的Windows DIB

if((m_lpBMIH)->biSize==40){

m_nColorTableEntries=256;//修改数据成员

m_lpBMIH->biBitCount=8;

DWORD RowLength=4*(((m_lpBMIH->biWidth)*(m_lpBMIH->biBitCount)+31)/32);

m_dwSizeImage=RowLength*(m_lpBMIH->biHeight);

//分配一段保存256灰度位图的颜色表和实际位图的空间

DWORD NewBufSize=(DWORD)(256*sizeof(RGBQUAD)+RowLength*(m_lpBMIH->biHeight));

HGLOBAL hNewPalette=::GlobalAlloc(GHND,NewBufSize);

LPVOID lpvNewColorTable=::GlobalLock(hNewPalette);

LPBYTE lpNewImage=(LPBYTE)lpvNewColorTable+256*sizeof(RGBQUAD);

LPRGBQUAD lpvColorTable=(LPRGBQUAD)lpvNewColorTable;

//构造一个颜色表

for(int i=0;ibiHeight;j++)

{

for (long k=0;kbiWidth;k++)

{

//从位图数据计算得到Y值,写入新图中

Blue=(unsigned char)(*lpOldImage++);

Green=(unsigned char)(*lpOldImage++);

Red=(unsigned char)(*lpOldImage++);

Y=(float)(Red*0。

299+Green*0。587+Blue*0。

114);

Gray=(BYTE)Y;

*(lpNewImage++)=Gray;

}

}

memcpy(m_lpImage,lpvNewColorTable,NewBufSize);

m_lpvColorTable=m_lpImage;

m_lpImage=(LPBYTE)m_lpvColorTable+256*sizeof(RGBQUAD);

::GlobalUnlock(hNewPalette);

::GlobalFree(hNewPalette);

}

else

{

AfxMessageBox("不是扩展的windows位图");

}

}

else

{

AfxMessageBox("不是有效的真彩色位图!");

}

MakePalette();

return *this;

}。

全部

matlab 16位灰度值转8位,在matlab中如何将灰度值为24位的转化为8?相关推荐

  1. pandas使用replace函数替换dataframe中的值:replace函数对dataframe中的多个值进行替换、即一次性同时对多个值进行替换操作

    pandas使用replace函数替换dataframe中的值:replace函数对dataframe中的多个值进行替换.即一次性同时对多个值进行替换操作 目录

  2. Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名)

    Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名) 目录

  3. ajax拿table里的th值,Jquery Ajax 异步设置Table中某列的值

    可根据table中某列中的ID去改变某列的值! 只是参考,实际应用中不能这样做的,如果有很多行,频繁访问服务器,服务器是顶不住的! JS: $(document).ready(function () ...

  4. mysql+默认值+default_十六、MySQL 中数据类型的默认值 - default 约束-搜云库

    MySQL 中,所有的数据类型,都可以显式或隐式的拥有默认值. 我们可以使用 DEFAULT 约束显式的为列指定一个默认值.比如 CREATE TABLE t1 ( i INT DEFAULT -1, ...

  5. python找出值为nan_Python Numpy:找到list中的np.nan值方法

    这个问题源于在训练机器学习的一个模型时,使用训练数据时提示prepare的数据中存在np.nan 报错信息如下: ValueError: np.nan is an invalid document, ...

  6. scala中map添加值_如何在Scala Map中反转键和值

    scala中map添加值 A Map is a data structure that stores data as key: value pair. 映射是一种将数据存储为键:值对的数据结构. Sy ...

  7. php 判断数组某个值,浅谈PHP检查数组中是否存在某个值 in_array 函数

    PHP in_array() 函数检查数组中是否存在某个值,如果存在则返回 TRUE ,否则返回 FALSE . 语法: bool in_array( mixed needle, array arra ...

  8. MATLAB红色分量图如何合成,如何修改一张图片中红色分量的值?

    感谢您的回复,我也觉得将r的值写回i保存是非常正确的 但在运行了matlab后似乎仍有写问题,这里我贴出我的代码和运行结果 i=imread('88.jpg');                %读入 ...

  9. php将数组值用 分开,PHP将数组中的多个值替换为另一个数组

    我想将第一个数组中的值插入第二个数组中,其中键的名称是[cost]: $newCossArray ( [0] => 52.68 [1] => 7414.68 [2] => 2471. ...

  10. 关于灰度共生矩阵的一点知识(MATLAB)

    目录 一.基本理论 1.背景 2.概念 3.含义 4.例证 5.规律 二.特征量 1.对比度(contrast) 2.角二阶矩(Angular Second Moment, ASM) 3.熵(entr ...

最新文章

  1. R语言nrow函数获取dataframe或者matrix行计数统计
  2. 文远知行核武器曝光:无人车量产都靠它
  3. 区块链100问1-20问
  4. SMGP3.0协议的概念知识
  5. js统计html页面访问的次数6,JS综合篇--[总结]Web前端常用代码片段整理
  6. DTC跨境电商白皮书
  7. 千里眼摄像头支持对象存储吗_3.5ms超高速写入、支持125℃工作的EEPROM“BR24H-5AC系列”...
  8. php面试中的经典问题
  9. jq post 表单提交文件_Power Query 中使用POST方法进行网络抓取的尝试
  10. 对比Windows 8模拟器(Simulator)和Windows Phone仿真器(Emulator)
  11. Java Web GenericServlet
  12. DJ设备市场现状及未来发展趋势
  13. pymysql长时间连接自动断开解决方案
  14. 服务器尚未完成维护梦幻西游,梦幻西游维护公告
  15. Pandas 报错:index must be monotonic increasing or decreasing
  16. Python 之CV2详解
  17. ruby中的符号_Ruby中的凡人和不朽符号
  18. 【信息收集】第六章 社会工程学
  19. [C语言编程练习][14]编写一个程序,使用嵌套循环,按下面格式打印字母。A
  20. 算法设计与分析5.11求解满足方程解问题

热门文章

  1. C/C++实现删除字符串的首尾空格
  2. TP引用样式表和js文件及验证码
  3. linux延时与定时操作
  4. gprof, Valgrind and gperftools - an evaluation of some tools for application level CPU profiling on
  5. php Pthread 多线程 (二) Worker和Threaded
  6. 解决SQL命令行回退的问题
  7. wxPython python3.x下载地址
  8. PL/SQL块中不能直接执行DDL语句(错误)
  9. 460. LFU 缓存
  10. 400. 第 N 位数字