簡體   English   中英

Qt逐像素縮放

[英]Qt Drawing pixel by pixel zoomed

我試圖在互聯網上找到一些幫助,我有一些代碼要測試,但是沒有一個像我想要的那樣工作。

我會用Qt逐像素繪制一些東西。

我嘗試在QLabel使用受保護事件mousePressEventQImage起作用,但是像素太小而看不到它們。

我嘗試縮放Image,效果更好,但是位置X,Y現在與像素位置不同,或者它們與像素位置不同步。

如果有人有想法重新創建此圖片,請在此處截圖我要執行的操作...

在此處輸入圖片說明

如果我可以通過Qt完全做到這一點,那么我將節省大量時間,只需一個基本像素一個像素地繪制一個示例,就可以將Paint,Black和White格式放大到800%。

謝謝。

這是針對特定大小進行硬編碼的解決方案-只需在pixmap和draw小部件之間實現相對坐標映射即可完成設置。

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0) : QWidget(parent), pressed(0) {
        color = Qt::black;
        pixmap = new QPixmap("h:/small.png");
        resize(240, 240);
    }
    ~Widget() { if (pixmap) delete pixmap; }

protected:
    void paintEvent(QPaintEvent *) {
        QPainter painter(this);
        painter.drawPixmap(0, 0, pixmap->scaled(240, 240));
        painter.drawPixmap(0, 0, *pixmap);
    }

    void mousePressEvent(QMouseEvent *e) {
        if (e->button() == Qt::RightButton)
            color = color == Qt::black ? Qt::white : Qt::black;
        else {
            pressed = 1;
            draw(e);
        }
    }

    void mouseReleaseEvent(QMouseEvent *) { pressed = 0; }
    void mouseMoveEvent(QMouseEvent *e) { draw(e); }

private:
    void draw(QMouseEvent *e) {
        if (pressed) {
            QPainter painter(pixmap);
            painter.setPen(color);
            int x = e->pos().x() / 12;
            int y = e->pos().y() / 12;
            painter.drawPoint(x, y);
            repaint();
        }
    }

    QColor color;
    QPixmap *pixmap;
    bool pressed;
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM