MiniGui实现透明位图的方法
2015-02-10 15:31
106 查看
在做一个小项目时需要在屏幕上显示一个电子时钟,使用MINIGUI,实现效果如下图
实现这个效果必须是有那个图片显示数字,用到的图片类似如下:
结构显示在界面上,图片会覆盖原来的背景,造成效果不好。
解决这个问题有两种方法:
1、使用PNG格式透明底色的图片,这个需要MINIGUI支持PNG格式图片
2、使用MINIGUI提供的过滤位图的函数。
下面主要介绍第二种方法。
使用如下函数创建一个画布,注意最后一个参数必须为0
CreateMemDC(100,100, 16,MEMDC_FLAG_HWSURFACE | MEMDC_FLAG_SRCALPHA, 0x0000F000, 0x00000F00, 0x000000F0, 0x00000000);然后把图片画在画布上
FillBoxWithBitmap(mem_dc, 0, 0, 0, 0, &myalarm);设置画布过滤颜色
SetMemDCColorKey (mem_dc, MEMDC_FLAG_SRCCOLORKEY | MEMDC_FLAG_RLEACCEL, COLOR_black);最后把画布铺到你的屏幕上去
BitBlt(mem_dc, 0, 0, 100, 100, hdc, 0, 0, 0);
实现的原理其实是相当于在把画布铺到屏幕过程中过滤掉你设置的特定颜色。
实现这个效果必须是有那个图片显示数字,用到的图片类似如下:
结构显示在界面上,图片会覆盖原来的背景,造成效果不好。
解决这个问题有两种方法:
1、使用PNG格式透明底色的图片,这个需要MINIGUI支持PNG格式图片
2、使用MINIGUI提供的过滤位图的函数。
下面主要介绍第二种方法。
使用如下函数创建一个画布,注意最后一个参数必须为0
CreateMemDC(100,100, 16,MEMDC_FLAG_HWSURFACE | MEMDC_FLAG_SRCALPHA, 0x0000F000, 0x00000F00, 0x000000F0, 0x00000000);然后把图片画在画布上
FillBoxWithBitmap(mem_dc, 0, 0, 0, 0, &myalarm);设置画布过滤颜色
SetMemDCColorKey (mem_dc, MEMDC_FLAG_SRCCOLORKEY | MEMDC_FLAG_RLEACCEL, COLOR_black);最后把画布铺到你的屏幕上去
BitBlt(mem_dc, 0, 0, 100, 100, hdc, 0, 0, 0);
实现的原理其实是相当于在把画布铺到屏幕过程中过滤掉你设置的特定颜色。
相关文章推荐
- 绘制不规则位图方法总结,多种实现方法,全面测试比较!
- VC中使用GDI函数实现位图的透明
- C++Builder/Delphi中透明Panel及透明窗口的实现方法
- C++ 轻松实现透明位图(zhuan)
- 利用CBitmapButton类实现位图按钮的两种方法
- 用Java实现颜色透明值混算的一种方法
- C++Builder/Delphi中透明Panel及透明窗口的实现方法
- 三个实现透明效果的方法(我还没有试过,不保证质量)
- VC中使用GDI函数实现位图的透明
- 透明位图实现
- 利用.NET Remoting基础架构中的真实代理/透明代理技术实现了不针对具体类型、具体方法的通用方法调用拦截机制
- 绘制不规则位图方法总结,多种实现方法,全面测试比较
- VC++实现位图显示透明效果
- VC中使用GDI函数实现位图的透明
- 绘制不规则位图方法总结,多种实现方法,全面测试比较
- 一种简单的方法在程序中实现透明效果(JAVA)
- 网页中实现Flash透明的两种方法
- 位图按钮的实现方法
- 创建掩码位图来实现透明绘图
- 半透明及透明位图的实现技术