📄 window.cpp
字号:
#include <qpainter.h>#include <qimage.h>#include "window.h"#include "global.h"#include "cmv.h"#include "cvt.h"extern int use_cmv;extern struct cmv_data data;extern int bb;extern unsigned char src[];extern char *filename;char s[24];int *pc;int ch = 0;int ci = 0;int point_x = -1, point_y = -1;static inline void print_th() { int *p = data.th[ci]; fprintf(stderr, "\r%2d: ", ci+1); switch (ch) { case 0: fprintf(stderr, "Y %3d %3d u %3d %3d v %3d %3d", p[0], p[1], p[2], p[3], p[4], p[5]); break; case 1: fprintf(stderr, "y %3d %3d U %3d %3d v %3d %3d", p[0], p[1], p[2], p[3], p[4], p[5]); break; case 2: fprintf(stderr, "y %3d %3d u %3d %3d V %3d %3d", p[0], p[1], p[2], p[3], p[4], p[5]); break; default: exit(-1); }}window::window() { setMinimumSize(W, H); setMaximumSize(W, H); setBackgroundMode(Qt::NoBackground); setCaption(filename); pRGB = new QImage(W, H, 32, 0); if (use_cmv) { cvtm(src, pRGB->bits(), data.map, data.remap[ci]); pc = data.th[ci]; print_th(); } else cvt(src, pRGB->bits());}window::~window() { printf("\n");}void window::paintEvent(QPaintEvent *) { QPainter p(this); p.drawImage(0, 0, *pRGB); if (point_x >=0 && point_y >=0) { if (use_cmv) p.setPen(QColor(data.rgb[0][2], data.rgb[0][1], data.rgb[0][0])); else p.setPen(QColor(0, 255, 255)); p.drawRect(point_x-1, point_y-1, 3, 3); } if (use_cmv == 1 && bb && ci >= 0) { int t = data.remap[ci]-1; if (data.clist[t] <= 0) return; p.setPen(QColor(0, 255, 0)); struct reg_t *reg = data.cmax[t]; p.drawRect(reg->x1 << 1, reg->y1 << 1, (reg->x2 - reg->x1) << 1, (reg->y2 - reg->y1 + 1) << 1 ); }}void window::mousePressEvent(QMouseEvent *e) { int x = e->x(); int y = e->y(); if (x < 0 || x >= W || y < 0 || y >= H) { return; } int t; switch (e->button()) { case RightButton: point_x = x; point_y = y; sprintf(s, "%d,%d: %d %d %d", x, y, src[y * W + x], src[Y_SIZE + (y>>1) * W_2 + (x>>1) ], src[Y_SIZE + U_SIZE + (y>>1) * W_2 + (x>>1)] ); setCaption(s); break; case LeftButton: if (!use_cmv || (t = data.map[(y>>1) * (W_2+1) + (x>>1)]-1) < 0 || t == ci) return; ci = t; pc = data.th[ci] + (ch<<1); print_th(); cvtm(src, pRGB->bits(), data.map, data.remap[ci]); break; default: return; } update();}void window::keyPressEvent(QKeyEvent *e) { int t = e->ascii(); if (t == 'r' && point_x >=0 && point_y >= 0) { point_x = point_y = -1; setCaption(filename); update(); return; } if (!use_cmv || ci < 0) return; switch (t) { case 'y': if (ch == 0) return; ch = 0; pc = data.th[ci]; print_th(); return; case 'u': if (ch == 1) return; ch = 1; pc = data.th[ci] + 2; print_th(); return; case 'v': if (ch == 2) return; ch = 2; pc = data.th[ci] + 4; print_th(); return; case '1': if (pc[0] == 0) return; --pc[0]; cmv_reinit(&data, ch, ci, pc[0], 1); break; case '2': if (pc[0] == pc[1]) return; cmv_reinit(&data, ch, ci, pc[0], 0); ++pc[0]; break; case '3': if (pc[1] == pc[0]) return; cmv_reinit(&data, ch, ci, pc[1], 0); --pc[1]; break; case '4': if (pc[1] == 255) return; ++pc[1]; cmv_reinit(&data, ch, ci, pc[1], 1); break; default: return; } print_th(); cmv_process(&data, src); cvtm(src, pRGB->bits(), data.map, data.remap[ci]); update();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -