欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    彩色变为灰色.docx

    • 资源ID:1247710       资源大小:23.05KB        全文页数:27页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    彩色变为灰色.docx

    1、彩色变为灰色彩色变为灰色:1:建立菜单,消息映射2:编写映射函数void CBianhuanView:OnHuise() /彩色图变为灰度图 /k=1; /k=1用于标记执行过该函数 CBianhuanDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); LPSTR lpDIB; / 指向DIB的指针 LPSTR lpDIBBits; / 指向DIB象素指针 DWORD Wide; / DIB中图像的宽度 DWORD Height; / DIB中图像的高度 lpDIB = (LPSTR) :GlobalLock(HGLOBAL) pDoc-GetHObj

    2、ect(); Wide=pDoc-GetDibImage()-GetWidth(lpDIB); Height=pDoc-GetDibImage()-GetHeight(lpDIB); lpDIBBits = pDoc-GetDibImage()-GetBits(lpDIB); pDoc-GetDibImage()-Huise( lpDIBBits, Wide, Height); :GlobalUnlock(HGLOBAL) pDoc-GetHObject(); pDoc-UpdateAllViews(NULL); /更新视图 EndWaitCursor();实现以上函数,需要以下准备:(1)

    3、BianhuanDoc.h中增加成员变量: protected: HGLOBAL m_hDIB; CDib* m_pDibImage;/新增加的!(2) BianhuanDoc.h中增加成员函数AHGLOBAL GetHObject() const /获取Dib对象的句柄 return m_hDIB; B CDib* GetDibImage() const/新增加的! return m_pDibImage; (3) Dib.h中增加成员函数: A.LPSTR GetBits(LPSTR); /取得位图数据的入口地址 B.WORD GetPalSize(LPSTR); /取得调色板的大小 C.

    4、WORD GetColorNum(LPSTR); /取得位图包含的颜色数目(4) Dib.cpp中 A.LPSTR CDib:GetBits(LPSTR lpdib) return (lpdib + (LPBITMAPINFOHEADER)lpdib)-biSize+GetPalSize(lpdib);/ return (lpdib + *(LPDWORD)lpdib+GetPalSize(lpdib); B.WORD CDib:GetPalSize(LPSTR lpdib) return (WORD)(GetColorNum(lpdib) * sizeof(RGBQUAD);/ 计算DIB中

    5、调色板的大小CWORD CDib:GetColorNum(LPSTR lpdib) long dwClrUsed = (LPBITMAPINFOHEADER)lpdib)-biClrUsed; / 读取dwClrUsed值 if (dwClrUsed != 0) return (WORD)dwClrUsed;/ 如果dwClrUsed不为0,直接返回该值 WORD wBitCount = (LPBITMAPINFOHEADER)lpdib)-biBitCount;/ 读取biBitCount值 switch (wBitCount)/ 按照像素的位数计算颜色数目 case 1: return 2

    6、; case 4: return 16; case 8: return 256; default: return 0;(5) 编写灰色函数void CDib:Huise(LPSTR lpDIBBits,LONG lWidth, LONG lHeight) int i,j; LONG lLineBytes; / unsigned char* lpSrc; lLineBytes = WIDTHBYTES(lWidth * 8); for(i = 0; i lHeight; i+) /逐列扫描 for(j = 0; j 1000#pragma once#endif / _MSC_VER 1000 #

    7、define PalVersion 0x300 / 调色板版本/ DIB常量#define WIDTHBYTES(bits) (bits) + 31) / 32 * 4) /自己新增加的!class CDib : public CObject public: CDib(); virtual CDib();/operationspublic: / 用于操作DIB的函数声明 BOOL DrawDib(HDC, LPRECT,HGLOBAL, LPRECT,CPalette*);/显示位图 BOOL ConstructPalette(HGLOBAL,CPalette* ); /构造逻辑调色板 LPS

    8、TR GetBits(LPSTR); /取得位图数据的入口地址 DWORD GetWidth(LPSTR); /取得位图的宽度 DWORD GetHeight(LPSTR); /取得位图的高度 WORD GetPalSize(LPSTR); /取得调色板的大小 WORD GetColorNum(LPSTR); /取得位图包含的颜色数目 WORD GetBitCount(LPSTR); /取得位图的颜色深度 HGLOBAL CopyObject(HGLOBAL); /用于复制位图对象 BOOL CreateDIBPalette(HGLOBAL hDib, CPalette* pPal); /增加

    9、此函数! void Huise(LPSTR lpDIBBits,LONG lWidth, LONG lHeight); /增加此函数原型 BOOL SaveFile(HGLOBAL , CFile&); /存储位图为文件 HGLOBAL LoadFile(CFile&); /从文件中加载位图/ 在对图象进行处理时,针对位图的字节宽度必须是4的倍数的这一要求,/ 我们设计了函数GetRequireWidth,来处理这种比较特殊的情况 int GetReqByteWidth(int ); /转换后的字节数GetRequireByteWidth long GetRectWidth(LPCRECT )

    10、; /取得区域的宽度 long GetRectHeight(LPCRECT); /取得区域的高度public: void ClearMemory(); void InitMembers();public: BOOL Ruihua(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, int iTempH, int iTempW, int iTempMX, int iTempMY,FLOAT * fpArray, FLOAT fCoef); LPBITMAPINFO lpbminfo; / 指向BITMAPINFO结构的指针 LPBITMAPINFOHEADER

    11、 lpbmihrd; /指向BITMAPINFOHEADER结构的指针 BITMAPFILEHEADER bmfHeader; /BITMAPFILEHEADER结构 LPSTR lpdib; /指向DIB的指针 LPSTR lpDIBBits; / DIB像素指针 DWORD dwDIBSize; /DIB大小 HGLOBAL m_hDib;/DIB对象的句柄 RGBQUAD* lpRgbQuag;/指向颜色表的指针;#endif / !defined(AFX_DIB_H_AC952C3A_9B6B_4319_8D6E_E7F509348A88_INCLUDED_)!下面是Dib.cpp/

    12、MyDib.cpp: implementation of the CDib class.#include stdafx.h#include Dib.h#include #ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE=_FILE_;#define new DEBUG_NEW#endif/* * Dib文件头标志(字符串BM) */#define DIB_MARKER (WORD) (M m_hObject; hOldPal = :SelectPalette(hDC, hPal, TRUE); :SetStretchBltMode(hDC, C

    13、OLORONCOLOR);/ 设置显示模式 bSuccess = :StretchDIBits(hDC, / 设备环境句柄 lpDCRect-left, /目标X坐标 lpDCRect-top, / 目标Y坐标 GetRectWidth(lpDCRect), / 目标宽度 GetRectHeight(lpDCRect), / 目标高度 lpDIBRect-left, / 源X坐标 lpDIBRect-top, / 源Y坐标 GetRectWidth(lpDIBRect), / 源宽度 GetRectHeight(lpDIBRect), / 源高度 lpDIBBits, / 指向dib像素的指针

    14、 (LPBITMAPINFO)lpdib, / 指向位图信息结构的指针 DIB_RGB_COLORS, / 使用的颜色数目 SRCCOPY); / 光栅操作类型 :GlobalUnlock(hDIB); / 解除锁定 if (hOldPal != NULL)/ 恢复系统调色板 :SelectPalette(hDC, hOldPal, TRUE); return bSuccess; /*函数名称: 增加此函数! * CreateDIBPalette() * 参数: * HDIB hDIB - 指向DIB对象的指针 * CPalette* pPal - 指向DIB对象调色板的指针 * 返回值: *

    15、 BOOL - 创建成功返回TRUE,否则返回FALSE。 * 说明: * 该函数按照DIB创建一个逻辑调色板,从DIB中读取颜色表并存到调色板中, * 最后按照该逻辑调色板创建一个新的调色板,并返回该调色板的句柄。这样 * 可以用最好的颜色来显示DIB图像。 */BOOL CDib:CreateDIBPalette(HGLOBAL hDib, CPalette* pPal) LPLOGPALETTE lpPal; / 指向逻辑调色板的指针 HANDLE hLogPal; / 逻辑调色板的句柄 HPALETTE hPal = NULL; / 调色板的句柄 int i; / 循环变量 WORD

    16、wNumColors; / 颜色表中的颜色数目 LPSTR lpbi; / 指向DIB的指针 LPBITMAPINFO lpbmi; / 指向BITMAPINFO结构的指针(Win3.0) LPBITMAPCOREINFO lpbmc; / 指向BITMAPCOREINFO结构的指针 BOOL bWinStyleDIB; / 表明是否是Win3.0 DIB的标记 BOOL bResult = FALSE; / 创建结果 if (hDib = NULL) return FALSE; lpbi = (LPSTR) :GlobalLock(HGLOBAL) hDib); / 锁定DIB lpbmi

    17、= (LPBITMAPINFO)lpbi; / 获取指向BITMAPINFO结构的指针(Win3.0) lpbmc = (LPBITMAPCOREINFO)lpbi; / 获取指向BITMAPCOREINFO结构的指针 wNumColors = GetColorNum(lpbi);/ 获取DIB中颜色表中的颜色数目 if (wNumColors != 0) / 分配为逻辑调色板内存 hLogPal = :GlobalAlloc(GHND, sizeof(LOGPALETTE) + sizeof(PALETTEENTRY) * wNumColors); / 如果内存不足,退出 if (hLogP

    18、al = 0) :GlobalUnlock(HGLOBAL) hDib); / 解除锁定 return FALSE; lpPal = (LPLOGPALETTE) :GlobalLock(HGLOBAL) hLogPal); / lpPal-palVersion = PALVERSION; / 设置版本号 lpPal-palNumEntries = (WORD)wNumColors;/ 设置颜色数目 / bWinStyleDIB = IS_WIN30_DIB(lpbi); / 判断是否是WIN3.0的DIB / 读取调色板 for (i = 0; i palPalEntryi.peRed =

    19、lpbmi-bmiColorsi.rgbRed; lpPal-palPalEntryi.peGreen = lpbmi-bmiColorsi.rgbGreen; lpPal-palPalEntryi.peBlue = lpbmi-bmiColorsi.rgbBlue; / 保留位 lpPal-palPalEntryi.peFlags = 0; else / 读取红色绿色蓝色分量 lpPal-palPalEntryi.peRed = lpbmc-bmciColorsi.rgbtRed; lpPal-palPalEntryi.peGreen = lpbmc-bmciColorsi.rgbtGree

    20、n; lpPal-palPalEntryi.peBlue = lpbmc-bmciColorsi.rgbtBlue; / 保留位 lpPal-palPalEntryi.peFlags = 0; bResult = pPal-CreatePalette(lpPal);/ 按照逻辑调色板创建调色板,并返回指针 :GlobalUnlock(HGLOBAL) hLogPal); / 解除锁定 :GlobalFree(HGLOBAL) hLogPal); / 释放逻辑调色板 :GlobalUnlock(HGLOBAL) hDib); / 解除锁定 return bResult;/* * 函数名称:Con

    21、structPalette(HGLOBAL hDIB, CPalette* pPal) * 函数参数: * HGLOBAL hDIB,DIB对象的句柄 * CPalette* pPal,调色板的指针 * 函数类型:BOOL * 函数说明:该函数按照DIB创建一个逻辑调色板 */BOOL CDib:ConstructPalette(HGLOBAL hDIB, CPalette* pPal) HANDLE hLogPal;/ 逻辑调色板的句柄 int iLoop;/ 循环变量 BOOL bSuccess = FALSE;/ 创建结果 if (hDIB = NULL)/判断是否是有效的DIB对象 r

    22、eturn FALSE;/ 返回FALSE lpdib = (LPSTR) :GlobalLock(HGLOBAL) hDIB);/ 锁定DIB lpbminfo= (LPBITMAPINFO)lpdib; long wNumColors =GetColorNum(lpdib);/ 获取DIB中颜色表中的颜色数目 if (wNumColors != 0) hLogPal = :GlobalAlloc(GHND, sizeof(LOGPALETTE)/ 分配为逻辑调色板内存 + sizeof(PALETTEENTRY) * wNumColors); if (hLogPal = 0)/ 如果失败则

    23、退出 :GlobalUnlock(HGLOBAL) hDIB);/ 解除锁定 return FALSE; LPLOGPALETTE lpPal = (LPLOGPALETTE) :GlobalLock(HGLOBAL) hLogPal); lpPal-palVersion = PalVersion;/ 设置调色板版本号 lpPal-palNumEntries = (WORD)wNumColors;/ 设置颜色数目 for (iLoop=0; iLooppalPalEntryiLoop.peRed =lpbminfo-bmiColorsiLoop.rgbRed;/ 读取三原色分量 lpPal-palPalEntryiLoop.peGreen =lpbminfo-


    注意事项

    本文(彩色变为灰色.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开