|
本帖最后由 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的缓存加大也没用
不知道这个图片旋转的问题咋解决了
|
|