Graphics Effects の内部クラス QPixmapColorizeFilter を使って画像に色を付けられます。ただし Graphics Effects は設計上の欠陥のために廃止されています。
harness.h:
#pragma once
#include <QWidget>
#include <private/qpixmapfilter_p.h>
class Harness : public QWidget
{
Q_OBJECT
public:
explicit Harness(const QString& fileName, const QColor& colorizingColor = QColor(7+50, 142, 17+50));
protected:
void paintEvent(QPaintEvent* event) override;
private:
struct {
QString fileName;
QPixmapColorizeFilter* colorizingFilter;
QPixmap pixmap;
QColor colorizingColor;
} d;
};
harness.cpp:
#include "harness.h"
#include <QPainter>
#include <QDebug>
Harness::Harness(const QString& fileName, const QColor& colorizingColor)
: QWidget(0)
{
d.fileName = fileName;
d.colorizingColor = colorizingColor;
d.colorizingFilter = new QPixmapColorizeFilter(this);
if (!d.pixmap.load(fileName)) {
qDebug() << "Invalid image file " << fileName << endl;
return;
}
resize(d.pixmap.size());
}
void Harness::paintEvent(QPaintEvent*)
{
QPainter painter(this);
d.colorizingFilter->setColor(d.colorizingColor);
d.colorizingFilter->draw(&painter, QPointF(0.0, 0.0), d.pixmap);
}
QPixmapColorizeFilter::draw() の呼び出し方は以下のようになっています。
void draw(QPainter* painter, const QPointF& dest, const QPixmap& src, const QRectF& srcRect = QRectF()) const;
painter | 描画先 QPainter。 |
dest | 色を付けた画像の描画位置。 |
src | 元画像。 |
srcRect | 元画像の部分矩形領域。空ならば全領域。指定した画像領域を切り出し色付して描画する。 |
main.cpp:
#include "harness.h"
#include <QApplication>
#include <QDebug>
int main(int argc, char** argv)
{
QApplication app(argc, argv);
switch (app.arguments().count()) {
case 2:
case 3:
break;
default:
qWarning() << "Usage: colorise image [color]";
exit(-1);
}
const QString fileName = app.arguments().at(1);
QScopedPointer harness([&]() {
if (app.arguments().count() == 2) {
return new Harness(fileName);
} else {
const QColor colorizingColor(app.arguments().at(2));
return new Harness(fileName, colorizingColor);
}
}());
harness.data()->show();
return app.exec();
}
コマンドラインで画像ファイルと色を指定して動かします。色を指定しない場合にはデフォルトの緑色になります。
colorize.pro:
QT += widgets widgets-private
SOURCES += main.cpp \
harness.cpp
HEADERS += \
harness.h
プライベートクラスを使っているので widgets-private の指定が必要です。
参考情報
Qt Modules Maturity Level
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。