目录
缩放:全屏
左下角
右下角
居中
下移
画面下移1/2
画面展现效果
左下角,画面缩放到左下角,触摸跟随缩放到左下角
右下角:画面整体缩放到右下角,此时触摸也要同步

底部居中:

下移

1:F框的触摸缩放有两个协议分别是 0x54 和0x6d
0x54指令是缩放,0x55 是取消PC缩放----全屏

6d:这个指令是做给欧帝的

1:0x6d
应用层传下来的坐标只有四个 x y h w x坐标 y坐标 高度 宽度
对于0x6d的由于取值范围是0~0x7fff 计算的时候要放大0x7fff倍数
公式:转化后的坐标:
ox = (x*TOUCH_ZOOM_NUM)/OSD_WIDTH;
oy = (y*TOUCH_ZOOM_NUM)/OSD_HEIGHT;
ow = (w*TOUCH_ZOOM_NUM)/OSD_WIDTH;
oh = (h*TOUCH_ZOOM_NUM)/OSD_HEIGHT;
其中:
#define TOUCH_ZOOM_NUM 0x7FFF 就算放大系数
#ifdef OSD_4K
#define OSD_WIDTH 3840 ---4k对应的分辨率
#define OSD_HEIGHT 2160
#else
#define OSD_WIDTH 1920 ---2k对应的分辨率
#define OSD_HEIGHT 1080
#endif
发到框的数据要求是13位
其中:前四位是固定值IMW_U8 cmd_zoom_buf[] = {0x55, 0xaa, 0x6d, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 
X1 X2 是转换后X坐标的低字节和高字节
Y1 Y2 W1 W2 H1 H2同理 分别存放到数组 如下:
cmd_zoom_buf[4] = LOW(ox);
cmd_zoom_buf[5] = HIGH(ox);
cmd_zoom_buf[6] = LOW(oy);
cmd_zoom_buf[7] = HIGH(oy);
cmd_zoom_buf[8] = LOW(ow);
cmd_zoom_buf[9] = HIGH(ow);
cmd_zoom_buf[10] = LOW(oh);
cmd_zoom_buf[11] = HIGH(oh);
最后一位就算校验和 数组0-12 的和加起来取低16位的值
for(int i=0;i<13;i++){
tmp = (tmp + cmd_zoom_buf[i]);
}
cmd_zoom_buf[12] = tmp&0xff;
write(touch_uart_fd,cmd_zoom_buf,13); 
2:0x54和0x55
0x55 是取消PC触摸缩放指令是固定值
IMW_U8 reset_buf[] = {0x55, 0xaa, 0x55, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60};
0x54 缩放指令就比较复杂,协议涉及到的缩放系数比较多,并且跟给过来的触摸协议解释不一致,需要调试才能找到规律。但最终还是要a b c d e f 这个几个系数写到触摸框
a: x轴缩放系数要恒大于1
b:固定为0
c:缩放后的参数 x轴坐标
d:固定为0
e:y轴缩放系数 要恒大于1
F:缩放后的参数 y轴坐标
假设下面这个矩形就是屏幕
原点坐标是左上角
(0,0)
当左下角的时候
先确定缩放的系数是多少
放大4096
(4096*分辨率w)/w------ 这个值就是a
(4096*分辨率h)/h ------- 这个值就是e
接着确定缩放后相对于原点的坐标:因为原点在左上角 所以是负值
x轴
C = 0 - ((放大4096*x)/分辨率w)/a
F= 0 - ((放大4096*y)/分辨率h)/e