emWin5的图片半透明之旅
文章目录
- 目标
- 过程
- 直接使用png (失败了)
- 通过 BmpCvt.exe 转换一下(成功了)
- 通过bmp转 (半成功吧)
- 补充
- 工程结构整理
目标
显示半透明效果,类似png那种,能透过去,看到背景。
过程
直接使用png (失败了)
失败了。
png图片转成.c文件后。调用
IMAGE_SetPNG (IMAGE_Handle hObj, const void * pData, U32 FileSize);
这特么是个坑。仿真器不支持,需要链接libpng;emwin不支持,需要专门版本适配 emwin_png.zip。
我都试了,研究了一天,仿真器和真实环境我都没走通。
不管是vc6.0还是 errno错误还是arm和thumb模式切换,都试了。放弃了。
通过 BmpCvt.exe 转换一下(成功了)
成功了。
将png文件转成.c文件,然后加载使用
// 创建 IMAGE 控件
hImage = IMAGE_CreateEx(50, 50, 200, 200, hItem, WM_CF_SHOW, 0, ID_IMAGE_1);
IMAGE_SetBitmap(hImage, &bmzhizhen1);
通过bmp转 (半成功吧)
png 通过 BmpCvt.exe 转成 bmp,然后bmp转成 .c文件。
然后如前一节一样加载。
注意的是,如果png是通过windows画图转的bmp,抱歉,不行,因为“windows画图”自动加了一个白色背景。
懒得再研究对比原因了。
就这样吧。
补充
工程结构整理
目的:为了不将图片的数组跟代码混到一起。
因为太大了。
1,新建一个目录专门放图片,将图片转成.c文件。添加到工程中
2,使用图片的地方使用外部引用的方式。
extern unsigned char _aczt1[77188UL + 1];// 声明外部图片数据,背景
extern GUI_CONST_STORAGE GUI_BITMAP bmzhizhen1; //指针1
extern GUI_CONST_STORAGE GUI_BITMAP bmzhizhen2;//指针2
case WM_INIT_DIALOG:
hItem = WM_GetDialogItem(pMsg->hWin, ID_IMAGE_0);
IMAGE_SetJPEG(hItem, _aczt1, sizeof(_aczt1));
IMAGE_Handle hImage;
// 创建 IMAGE 控件
hImage = IMAGE_CreateEx(350, 350, 200, 200, hItem, WM_CF_SHOW, 0, ID_IMAGE_1);
IMAGE_SetBitmap(hImage, &bmzhizhen1);