没有合适的资源?快使用搜索试试~ 我知道了~
如何在vc中制作256色的16x16和32x32大小的彩色图标
3星 · 超过75%的资源 需积分: 13 30 下载量 120 浏览量
2011-01-23
15:12:36
上传
评论
收藏 47KB DOC 举报
温馨提示
试读
7页
如何在vc中制作256色的16x16和32x32大小的彩色图标,有详细的开发过程和程序代码!
资源推荐
资源详情
资源评论
如何在 vc 中制作 256 色的 16x16 和 32x32 大小的彩色图标
(Ranger 发表于 2002-1-17 22:53:24)
在 Windows 的编程中,彩色图像的显示和处理一直是一个重要的课题,即使是在显
卡普遍支持真彩的今天,讨论 256 色位图的显示也是有意义的。通过对这一课题的讨论,
可以了解如何在 VC5 中实现装入图像,创建和使用调色板,以及最后将图像画出来。
总的来说,要显示一幅 256 色的位图,首先应得到该图的有关信息,通过位图的颜
色表创建一个逻辑调色板,然后将这个调色板选入设备环境,实现这个调色板,最后将
位图用 BitBlt 函数拷贝到设备环境就可以了。
具体实现步骤如下:
1、装载位图并创建调色板。
首先装入一幅位图,该位图既可以以资源的形式与程序绑在一起,也可以以文件
的形式从外部装入。然后将该位图与一个 Cbitmap 对象联系(Attach)起来。在这儿我
们应使用 API 函数 LoadImage(),而不是 CBitmap 类的成员函数 CBitmap::LoadBitmap(),
因为我们需要得到该位图的 DIBSECTION 结构,从这个结构中我们可以得到该位图的色彩
信息,从而建立一个与这些色彩相匹配的逻辑调色板。使用 CBitmap::LoadBitmap()将
会失去我们所需的位图的色彩信息。
得到位图后,下一步工作就是取得该位图的色彩信息。通过 CBitmap:GetObject()
函数,我们可以访问 DIBSECTION 结构,从中得到位图的色彩数。一般来说,这些信息存
在于 BITMAPINFOHEAD 结构中,不过,作为 DIBSECTION 结构的一部分,BITMAPINFOHEAD
有
时并未说明图像用了多少种颜色;碰到这种情况,我们可以看看图像的每一象素用了几
位(Bit)来描述颜色,如果是 8 位的话,因为 8 位二进制数可以表示 256 种不同的值,所
以该图像是 256 色的;同理,16Bit 表明是 64K 色。得到了位图所用的颜色数,就可以创
建逻辑调色板了。色彩超过 256 色的位图是没有颜色表(Color Table)的,这时我们只用
简单地创建一个和设备环境兼容的半色调调色板(Halftone Palette)就行了,在半色调
调色板中包含着所有不同颜色的样本。这显然不是最佳解决方案,但却是最简单的。
而对于颜色数小于或等于 256 的位图,我们就要从头建立一个新的调色板。先分配
足够的内存空间来装入图像的颜色表,颜色表可以利用 API 函数 GetDIBColorTable 获得;
然后再分配足够的内存给新建的逻辑调色板,将刚才得到的颜色表信息相应拷入新建调
色板中的 palPalEntry 域,并将 PalVersion 域设为 0X300。创建了调色板后,应将窗口刷
新重画。在具体的实现上,我们定义了一个函数 GetBitmapandPalette()来实现位图资
源的装入和逻辑调色板的创建,其功能实现框图如下(略)
函数具体实现如下:(程序)
以上程序只是简单的从一个固定路径(e:\project\showimage\bitmap1.bmp)
装入位图,读者可以将其功能扩充,如通过对话框选取等等,在此不多赘述。
最后还要补充的一点是,如果要显示的位图是作为位图资源与程序联系在一起的,
对以上程序稍作修改即可显示出来,修改方法如下:
首先将 GetBitmapandPalette()函数改为:
BOOLGetBitmapandPalette(UINT nidresource,
CBitmap &bitmap, CPalette &pal,long *w,long *h)
其中 nidresource 是该位图的 ID。
然后将 GetBitmapandPalette()中的第一句改为:
LPCTSTR lpszresourcename = (LPCTSTR)nidresource;
并将 LoadImage 函数改为:
资源评论
- Jade_jieyuanl2013-02-28有点看不太懂,不过还是谢谢!
UserName2010
- 粉丝: 1
- 资源: 32
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功