#include "mainwindow.h" #include "ui_mainwindow.h" #include #include #include #define DISPLAY_WIDTH 320 #define DISPLAY_HEIGHT 240 #define DISPLAY_X 10 #define DISPLAY_Y 10 QColor QColorFromRGB565(uint16_t color) { int R8 = (int) floor( (color>>(5+6)) * 255.0 / 31.0 + 0.5); int G8 = (int) floor( ((color>>5)&0x3F) * 255.0 / 63.0 + 0.5); int B8 = (int) floor( (color&0x1F) * 255.0 / 31.0 + 0.5); return QColor::fromRgb(R8,G8,B8); } QRgb QRgbFromRGB565(uint16_t color) { int R8 = (int) floor( (color>>(5+6)) * 255.0 / 31.0 + 0.5); int G8 = (int) floor( ((color>>5)&0x3F) * 255.0 / 63.0 + 0.5); int B8 = (int) floor( (color&0x1F) * 255.0 / 31.0 + 0.5); return qRgb(R8,G8,B8); } MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), image(DISPLAY_WIDTH,DISPLAY_HEIGHT,QImage::Format_RGB16), ui(new Ui::MainWindow) { ui->setupUi(this); image.fill(Qt::black); } void MainWindow::draw_line(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color) { //render_mutex.lock(); QPainter painter(&(image)); painter.setPen(QColorFromRGB565(color)); painter.drawLine(x1,y1,x2,y2); //render_mutex.unlock(); update(); } void MainWindow::draw_pixel(uint16_t x, uint16_t y, uint16_t color) { //render_mutex.lock(); image.setPixel(x,y,QRgbFromRGB565(color)); //render_mutex.unlock(); update(); } void MainWindow::clear(uint16_t color) { //render_mutex.lock(); image.fill(QColorFromRGB565(color)); //render_mutex.unlock(); update(); } void MainWindow::draw_rectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color) { //render_mutex.lock(); QPainter painter(&(image)); painter.setPen(QColorFromRGB565(color)); painter.drawRect(x1,y1,abs(x2-x1)+1,abs(y2-y1)+1); //render_mutex.unlock(); update(); } void MainWindow::fill_rectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color) { //render_mutex.lock(); QPainter painter(&(image)); painter.fillRect(x1,y1,abs(x2-x1)+1,abs(y2-y1)+1,QColorFromRGB565(color)); //render_mutex.unlock(); update(); } void MainWindow::draw_bitmap_unscaled(uint16_t x, uint16_t y, uint16_t width, uint16_t height, const uint16_t *dat) { //Creating a new image and access it directly is faster than setPixel QImage img(width,height,QImage::Format_RGB32); for(int yi=0; yi