硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2151|回复: 9
收起左侧

[emWin] 请教下,使用emwin显示透明图片有黑边 ?

[复制链接]

681

主题

3485

回帖

5553

积分

论坛元老

积分
5553
发表于 2018-5-22 10:10:31 | 显示全部楼层 |阅读模式
请教下,使用emwin显示透明图片有黑边 ?

效果如下:

1234.jpg

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-5-22 13:55:43 | 显示全部楼层
方便的话,上传一个指针的原始图片文件,我测试下。
回复

使用道具 举报

681

主题

3485

回帖

5553

积分

论坛元老

积分
5553
 楼主| 发表于 2018-5-22 15:17:42 | 显示全部楼层
本帖最后由 hpdell 于 2018-5-22 16:51 编辑
eric2013 发表于 2018-5-22 13:55
方便的话,上传一个指针的原始图片文件,我测试下。

你好,

原始图片

second_25x157.bmp


秒针显示函数

把 使用 BmpCvtST.exe v5.40 软件生成的数据,时钟图片数据写入到 SPI flash 里面,供后续
emWin 使用

软件设置如下:
1、打开需要生成的 argb 图片
2、菜单File-> Save as ...
3、保存类型选择 *.c
4、High color with Alpha(565) 后按保存即可,此时生成的图片数据是按照 3 字节生成的,带透明通道



秒针生成的数据身略 ....

GUI_BITMAP bmsecond_20x130 = {
  25,            // xSize
  157,          // ySize
  75,            // BytesPerLine
  24,            // BitsPerPixel
  NULL,        // Pointer to picture data
  NULL,        // Pointer to palette
  GUI_DRAW_BMPA565
};


uint8_t    * _rx_buff = NULL;
uint8_t    *_acClockBk_buf = NULL;

GUI_MEMDEV_Handle hMem1_ClockPict_miao;

void  secondes_init()
{
                _acClockBk_buf = mymalloc(SRAMEX,_Colckdial_272x272[3].DataSize );
                _rx_buff   = _acClockBk_buf;
                SPI_ReadBuff((uint8_t *) _rx_buff, _Colckdial_272x272[3].ReadDataAddr, _Colckdial_272x272[3].DataSize);   // 从qspi 里面读出数据
                hMem1_ClockPict_miao = GUI_MEMDEV_CreateFixed(0, 0,
                                                                                        _Colckdial_272x272[3].SizeX,
                                                                                        _Colckdial_272x272[3].SizeY,
                                                                                        GUI_MEMDEV_HASTRANS,
                                                                                        GUI_MEMDEV_APILIST_16,
                                                                                        GUI_COLOR_CONV_565);        
                GUI_MEMDEV_Select(hMem1_ClockPict_miao);
                _rx_buff   = _acClockBk_buf;
                bmsecond_20x130.pData = _rx_buff;
                GUI_DrawBitmap(&bmsecond_20x130, 0, 0);  // 显示透明效果的图片
                GUI_MEMDEV_Select(0);        
                myfree(SRAMEX, _acClockBk_buf);



       GUI_MEMDEV_WriteAt(hMem1_ClockPict_miao, 500, 70+245);    // 显示秒针
}






回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-5-23 09:04:28 | 显示全部楼层
指针图标没问题,的确是透明的。

你这里绘制的时候
GUI_MEMDEV_Select(hMem1_ClockPict_miao);
    //需要在这里把你要显示的背景色也加入。
                _rx_buff   = _acClockBk_buf;
                bmsecond_20x130.pData = _rx_buff;
                GUI_DrawBitmap(&bmsecond_20x130, 0, 0);  // 显示透明效果的图片
                GUI_MEMDEV_Select(0);        
回复

使用道具 举报

681

主题

3485

回帖

5553

积分

论坛元老

积分
5553
 楼主| 发表于 2018-5-23 09:23:06 | 显示全部楼层
本帖最后由 hpdell 于 2018-5-23 09:24 编辑
eric2013 发表于 2018-5-23 09:04
指针图标没问题,的确是透明的。

你这里绘制的时候



你好,你的意思就是需要重绘背景色一次吗 ????

GUI_MEMDEV_Select(hMem1_ClockPict_miao);
    //需要在这里把你要显示的背景色也加入。

                GUI_SetBkColor(0xc0c0c0);     // 重新绘制背景色  ???????????????????
               GUI_Clear();


                _rx_buff   = _acClockBk_buf;
                bmsecond_20x130.pData = _rx_buff;
                GUI_DrawBitmap(&bmsecond_20x130, 0, 0);  // 显示透明效果的图片
                GUI_MEMDEV_Select(0);      
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-5-23 09:39:40 | 显示全部楼层
hpdell 发表于 2018-5-23 09:23
你好,你的意思就是需要重绘背景色一次吗 ????

GUI_MEMDEV_Select(hMem1_ClockPict_miao);

可以的,如果你不设置,默认就是黑色背景。
回复

使用道具 举报

681

主题

3485

回帖

5553

积分

论坛元老

积分
5553
 楼主| 发表于 2018-5-23 10:52:06 | 显示全部楼层
eric2013 发表于 2018-5-23 09:39
可以的,如果你不设置,默认就是黑色背景。

好的,我试试看,等会回复你结果
回复

使用道具 举报

681

主题

3485

回帖

5553

积分

论坛元老

积分
5553
 楼主| 发表于 2018-5-23 19:16:11 | 显示全部楼层
本帖最后由 hpdell 于 2018-5-23 20:56 编辑
eric2013 发表于 2018-5-23 09:39
可以的,如果你不设置,默认就是黑色背景。

终于好了啊,多谢多谢

11.jpg



另外如果要在 表盘里面显示 时针、分针、秒针、而且是显示透明效果的话,改如何处理啊?

8888.png

//此函数用于将存储设备的内容绘制到 LCD 显示屏上
void GUI_MEMDEV_TestDisp(void)
{
        GUI_MEMDEV_WriteAt(hMem1_ClockPict_bk, 728, 70+245);   // 显示表盘背景
        GUI_MEMDEV_WriteAt(hMem1_ClockPict_shi, 652, 70+276);   // 显示时针
        GUI_MEMDEV_WriteAt(hMem1_ClockPict_fen, 552, 70+267);   //显示分针
        GUI_MEMDEV_WriteAt(hMem1_ClockPict_miao, 854, 70+275);  //显示秒针        

}

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-5-24 12:29:31 | 显示全部楼层
回复

使用道具 举报

681

主题

3485

回帖

5553

积分

论坛元老

积分
5553
 楼主| 发表于 2018-5-24 15:12:14 | 显示全部楼层
eric2013 发表于 2018-5-24 12:29
参考这个:http://www.armbbs.cn/forum.php?mod=viewthread&tid=5691&highlight=speed

好的,多谢多谢了哇
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-16 18:47 , Processed in 0.274444 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表