硬汉嵌入式论坛

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

[emWin] image控件的图片旋转

[复制链接]

26

主题

33

回帖

111

积分

初级会员

积分
111
发表于 2024-6-21 18:53:26 | 显示全部楼层 |阅读模式
本帖最后由 ccc_clive 于 2024-6-23 10:20 编辑

1.不设置角度,则图片可以旋转,设置了角度图片就没有显示了,不知道是不是库原本这个控件就不支持角度的,也没找到有该控件的相关例程
IMAGE_point[0] = IMAGE_CreateEx(0,0,800,480,root,WM_CF_SHOW,IMAGE_CF_MEMDEV,GUI_ID_USER_IMAGE_0);
        IMAGE_SetAngle(IMAGE_point[0,10*1000);
        IMAGE_SetAlign(IMAGE_point[0,GUI_ALIGN_CENTER);
        IMAGE_SetBitmap(IMAGE_point[0,&bmpointer);

2. 通过内存设备手动旋转但效果不好,而且不同的图片旋转后效果不一样,如图1

extern GUI_CONST_STORAGE GUI_BITMAP bmpressure_bk;
extern GUI_CONST_STORAGE GUI_BITMAP bmpointer;
extern GUI_CONST_STORAGE GUI_BITMAP bmpointer3;
static void draw_pressure_ex(uint8_t ch)
{
    static GUI_MEMDEV_Handle hMem1 = 0;
    static GUI_MEMDEV_Handle hMem2 = 0;

    if (hMem1 == 0)
    {
// hMem1 = GUI_MEMDEV_CreateFixed32(0,0,
//     bmpressure_bk.XSize, bmpressure_bk.YSize);
#if 1
        hMem1 = GUI_MEMDEV_CreateFixed(
            0, 0,
            bmpressure_bk.XSize,
            bmpressure_bk.YSize,
            GUI_MEMDEV_HASTRANS,
            // GUI_MEMDEV_NOTRANS,
            GUI_MEMDEV_APILIST_32,
            GUI_COLOR_CONV_8888);
        // GUI_COLOR_CONV_8888);
        GUI_MEMDEV_Select(hMem1);
        GUI_SetBkColor(GUI_TRANSPARENT);
        GUI_Clear();
#else
        hMem1 = GUI_MEMDEV_Create(0, 0, bmpressure_bk.XSize, bmpressure_bk.YSize);
        GUI_MEMDEV_Select(hMem1);
#endif

        GUI_DrawBitmap(&bmpressure_bk, 0, 0);
        GUI_MEMDEV_Select(0);
    }

    if (hMem2 == 0)
    {
#if 0
        hMem2 = GUI_MEMDEV_Create(
                0, 0,
                bmpointer.XSize,
                bmpointer.YSize);
#else
        hMem2 = GUI_MEMDEV_CreateFixed(
            0, 0,
            bmpointer.XSize,
            bmpointer.YSize,
            // GUI_MEMDEV_HASTRANS,
            GUI_MEMDEV_NOTRANS,
            GUI_MEMDEV_APILIST_32,
            GUI_COLOR_CONV_8888);
        // GUI_MEMDEV_APILIST_16,
        // GUI_COLOR_CONV_M565);

#endif
        GUI_MEMDEV_Select(hMem2);
        // GUI_SetBkColor(GUI_TRANSPARENT);
        GUI_SetBkColor(get_box_color());
        GUI_Clear();

        GUI_DrawBitmap(&bmpointer, 0, 0);
        GUI_MEMDEV_Select(0);
    }

    extern double get_pressure_value_kpa(uint8_t ch);
    extern double get_pressure_range(uint8_t unit, uint8_t pressure);
    double pressure = get_pressure_value_kpa(ch);
    double range = get_pressure_range(_var_uint8(PRESSURE_UNIT + ch), _var_uint8(PRESSURE_MODE + ch)); //  _var_uint32(PRESSURE_RANGE + 4 * ch);
    double angle = pressure * 180.0 / range;

    static GUI_MEMDEV_Handle hMem = 0;
    if (hMem == 0)
    {
#if 0
        hMem = GUI_MEMDEV_Create(
               0, 0, 89, 56);
#else
        hMem = GUI_MEMDEV_CreateFixed(
            0, 0,
            // bmpointer.XSize,
            // bmpointer.YSize,
            89, 56,
            // GUI_MEMDEV_HASTRANS,
            GUI_MEMDEV_NOTRANS,
            GUI_MEMDEV_APILIST_32,
            GUI_COLOR_CONV_8888);
        // GUI_COLOR_CONV_M565);

#endif
    }

    GUI_MEMDEV_Select(hMem);
    GUI_SetBkColor(get_box_color());
    GUI_Clear();

    // GUI_DrawBitmap(&bmpointer, 0, 0);
    // GUI_MEMDEV_WriteAt(hMem1, 0, 0);
    // GUI_MEMDEV_WriteAt(hMem2, 0, 0);
    GUI_MEMDEV_Rotate(hMem2, hMem, 0, 0, -angle * 1000, 1.0 * 1000);
    // GUI_MEMDEV_RotateHQ(hMem2, hMem, 0, 0, 0 * 1000, 1.0*1000);
    // GUI_MEMDEV_RotateHQHRT(hMem2, hMem, 0, 0, -90 * 1000, 1000);
    // GUI_MEMDEV_RotateHR(hMem2, hMem, 0, 0, -180 * 1000, 1000);
    GUI_DrawBitmap(&bmpressure_bk, 0, 0);

    GUI_MEMDEV_Select(0);
    GUI_MEMDEV_WriteAt(hMem, 639, 290);
}



图4 这个例程我测试了是没问题,但是换成图片就不行了

而且图3不透明的旋转后没显示的了,图2透明的旋转后反而还能显示,就是效果不好,指针有部分是黑的

emwin的缓存加大也没用
不知道这个图片旋转的问题咋解决了

图1

图1

图2

图2

图3

图3

图4

图4
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115894
QQ
发表于 2024-6-22 10:31:43 | 显示全部楼层
图片应该单独上传,否则看不到楼主的内容。这个是我们论坛的bug
回复

使用道具 举报

26

主题

33

回帖

111

积分

初级会员

积分
111
 楼主| 发表于 2024-6-23 13:07:39 | 显示全部楼层
测试出来了,是要直接用png图片,GUI_PNG_Draw 这个来画,以前用的bitmap来画的,出来效果不好。那是不是image也可以自定义paint然后用png来画
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115894
QQ
发表于 2024-6-24 08:53:08 | 显示全部楼层
ccc_clive 发表于 2024-6-23 13:07
测试出来了,是要直接用png图片,GUI_PNG_Draw 这个来画,以前用的bitmap来画的,出来效果不好。那是不是im ...

如果是这样的话,可以别使用image控件,直接使用按钮控件自定义回调绘制任何图形效果即可。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-25 14:18 , Processed in 0.442475 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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