硬汉嵌入式论坛

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

[emWin] IMAGE 圖片如何旋轉顯示

[复制链接]

1

主题

5

回帖

21

积分

新手上路

积分
21
发表于 2018-1-18 10:26:47 | 显示全部楼层 |阅读模式
如提:
初起使用EMWIN看了範例,卻還是無法理解如何使用GUIBuilder里的IMAGE原件顯示圖片
並可以旋轉圖片
知道要用GUI_MEMDEV_Rotate但如何架構起來
還請指教
想達到效果
使用BUTTON可以正轉或反轉控制,也可控制旋轉的速度
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2018-1-18 10:30:45 | 显示全部楼层
旋转图片不要使用IMAG控件,它是个控件。你要使用位图,也就是纯图片显示。

旋转方法看emWin手册的这个例子,先研究下如何旋转使用。 QQ截图20180118103207.jpg
回复

使用道具 举报

1

主题

5

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2018-1-18 14:17:08 | 显示全部楼层
eric2013 发表于 2018-1-18 10:30
旋转图片不要使用IMAG控件,它是个控件。你要使用位图,也就是纯图片显示。

旋转方法看emWin手册的这个 ...

我要如何在控件上顯示我的圖片
我用GUIBuilder  建了一個Framewin 三個BUTTON
要如何把旋轉到的位图顯示再Framewin 空白處
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2018-1-18 14:20:47 | 显示全部楼层
Ian 发表于 2018-1-18 14:17
我要如何在控件上顯示我的圖片
我用GUIBuilder  建了一個Framewin 三個BUTTON
要如何把旋轉到的位图顯 ...

IMAGE控件不能旋转。

你的这个就用我上面截图的方法即可,展示在空白处,就是在FrameWin的WM_PAINT消息里面搞,很容易的,尝试写个代码实际调试下,有什么问题找我。
回复

使用道具 举报

1

主题

5

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2018-1-18 15:45:04 | 显示全部楼层
eric2013 发表于 2018-1-18 14:20
IMAGE控件不能旋转。

你的这个就用我上面截图的方法即可,展示在空白处,就是在FrameWin的WM_PAINT消 ...

這是我目前的寫法,但畫面一直顯示不出來
GUI_CONST_STORAGE GUI_BITMAP bmlogo01 = {
  64, // xSize
  64, // ySize
  256, // BytesPerLine
  32, // BitsPerPixel
  (unsigned char *)_aclogo01,  // Pointer to picture data
  NULL,  // Pointer to palette
  GUI_DRAW_BMP8888
};


    case ID_BUTTON_2: // Notifications sent by 'Button'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
                                hLCD=GUI_MEMDEV_CreateFixed(100,100,bmlogo01.XSize,bmlogo01.YSize,GUI_MEMDEV_NOTRANS,GUI_MEMDEV_APILIST_32, GUI_COLOR_CONV_888);
                                hDst=GUI_MEMDEV_CreateFixed(100,100,100,100,GUI_MEMDEV_NOTRANS,GUI_MEMDEV_APILIST_32, GUI_COLOR_CONV_888);
                                GUI_MEMDEV_CopyFromLCD(hLCD);
                                GUI_MEMDEV_Select(hDst);
                                GUI_MEMDEV_Write(hLCD);
                                GUI_DrawBitmapEx(&bmlogo01,0,0,0,0,1000,1000);
                                GUI_MEMDEV_RotateHQ(hDst, hLCD,100/ 2,100/ 2,30 * 1000,1000);
                                GUI_MEMDEV_Select(0);
                                GUI_MEMDEV_CopyToLCDAt(hLCD, 100, 100);
        // USER END
        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
      }
      break;
    // USER START (Optionally insert additional code for further Ids)
    // USER END
    }
    break;

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2018-1-19 01:46:15 | 显示全部楼层
Ian 发表于 2018-1-18 15:45
這是我目前的寫法,但畫面一直顯示不出來
GUI_CONST_STORAGE GUI_BITMAP bmlogo01 = {
  64, // xSize

你这个使用有误,现在先把我二楼的那种效果子在你的FrameWin上面显示,特别注意这个要在WM_PAINT消息里面做。
还是搞不定的话,我有时间了给你做个简单的演示。
回复

使用道具 举报

1

主题

5

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2018-1-19 14:21:31 | 显示全部楼层
eric2013 发表于 2018-1-19 01:46
你这个使用有误,现在先把我二楼的那种效果子在你的FrameWin上面显示,特别注意这个要在WM_PAINT消息里面 ...

我這麼寫還是沒出來,且整個畫面都是FrameWin連BUTTON都被覆蓋了呈現白底

static void _cbDialog(WM_MESSAGE * pMsg) {
  WM_HWIN hItem;
  int     NCode;
  int     Id;
  // USER START (Optionally insert additional variables)
        GUI_MEMDEV_Handle hMemSource;
        GUI_MEMDEV_Handle hMemDest;
  // USER END

  switch (pMsg->MsgId) {
                case WM_PAINT:
                hMemSource = GUI_MEMDEV_CreateFixed(0,0,64,64,GUI_MEMDEV_NOTRANS,GUI_MEMDEV_APILIST_32, GUI_COLOR_CONV_888);
                hMemDest = GUI_MEMDEV_CreateFixed(0,0,100,100,GUI_MEMDEV_NOTRANS,GUI_MEMDEV_APILIST_32, GUI_COLOR_CONV_888);
                GUI_MEMDEV_Select(hMemSource);
                GUI_DrawBitmapEx(&bmlogo01,0,0,0,0,1000,1000);
                GUI_MEMDEV_Select(hMemDest);
                GUI_Clear();
                GUI_MEMDEV_Select(0);
                GUI_MEMDEV_RotateHQ(hMemSource, hMemDest,100/ 2,100/ 2, 30 * 1000, 1000);
                GUI_MEMDEV_CopyToLCDAt(hMemSource, 10, 64/ 2);
                GUI_MEMDEV_CopyToLCDAt(hMemDest, 100, 0);
                break;
回复

使用道具 举报

1

主题

5

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2018-1-19 14:48:27 | 显示全部楼层
附上目前的code


想要呈現的昰
按下TURN_F BUTTON 圖片向左旋轉30度
按下TURN_R BUTTON 圖片向右旋轉30度
按下reset BUTTON 圖片還原

TURN_F BUTTON

TURN_F BUTTON

TURN_R BUTTON

TURN_R BUTTON

reset BUTTON

reset BUTTON

FramewinDLG.c

57.43 KB, 下载次数: 46

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2018-1-19 15:42:46 | 显示全部楼层
看下面GIF效果,正反旋转
4.gif


代码,有点乱,未整理
GUIDEMO_Start.c (57.24 KB, 下载次数: 84)

回复

使用道具 举报

1

主题

5

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2018-1-19 16:00:49 | 显示全部楼层
eric2013 发表于 2018-1-19 15:42
看下面GIF效果,正反旋转

謝謝
只是我不種怎麼會是用GUI_MEMDEV_WriteAt(hMemDest, 50, 50);
而不是GUI_MEMDEV_CopyToLCDAt(hMemDest, 50, 50);

我研究研究
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2018-1-19 16:18:09 | 显示全部楼层
Ian 发表于 2018-1-19 16:00
謝謝
只是我不種怎麼會是用GUI_MEMDEV_WriteAt(hMemDest, 50, 50);
而不是GUI_MEMDEV_CopyToLCDAt(hMem ...

剩下还有什么问题自己研究下吧,你的这个问题就交流这么多,不再交流了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-16 05:19 , Processed in 0.430574 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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