QRgbaFloat::fromRgba64()を使いこなして、Qt GUIプログラミングをレベルアップ!
QRgbaFloat::fromRgba64()は、Qt GUIライブラリで提供される関数で、16ビット整数値4つで表現されたRGBAカラー値を、浮動小数点値4つで表現されたQRgbaFloat型に変換します。この関数は、画像処理やグラフィックデザインなど、さまざまな場面でカラー値を扱う際に役立ちます。
使い方
QRgbaFloat::fromRgba64()関数は、以下の引数を取ります。
alpha
: アルファ値の16ビット整数値blue
: 青色成分の16ビット整数値green
: 緑色成分の16ビット整数値red
: 赤色成分の16ビット整数値
これらの引数を使用して、QRgbaFloat型のインスタンスを作成できます。
QRgbaFloat color = QRgbaFloat::fromRgba64(0xFFFF, 0x0000, 0x0000, 0xFF00);
この例では、赤色255、緑色0、青色0、アルファ100%のQRgbaFloat型インスタンスを作成しています。
戻り値
QRgbaFloat::fromRgba64()関数は、変換されたQRgbaFloat型インスタンスを返します。
例
以下のコードは、QRgbaFloat::fromRgba64()関数を使用して、さまざまなカラー値を生成する例です。
QRgbaFloat red = QRgbaFloat::fromRgba64(0xFFFF, 0x0000, 0x0000, 0xFF00);
QRgbaFloat green = QRgbaFloat::fromRgba64(0x0000, 0xFFFF, 0x0000, 0xFF00);
QRgbaFloat blue = QRgbaFloat::fromRgba64(0x0000, 0x0000, 0xFFFF, 0xFF00);
QRgbaFloat black = QRgbaFloat::fromRgba64(0x0000, 0x0000, 0x0000, 0xFF00);
QRgbaFloat white = QRgbaFloat::fromRgba64(0xFFFF, 0xFFFF, 0xFFFF, 0xFF00);
- QRgbaFloat::fromRgba64()関数は、Qt GUI 5.12以降で使用できます。
- QRgbaFloat型は、QColor型に変換することもできます。
- QRgbaFloat::fromRgba64()関数は、QRgbaFloat16型とQRgbaFloat32型でも使用できます。
#include <QApplication>
#include <QLabel>
#include <QVBoxLayout>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// カラーパレットを作成
QVBoxLayout paletteLayout;
for (int i = 0; i < 16; ++i) {
QRgbaFloat color = QRgbaFloat::fromRgba64(
(i << 4) | i, (i << 4) | i, (i << 4) | i, 0xFF00);
QLabel *label = new QLabel;
label->setFixedSize(50, 50);
label->setStyleSheet(QString("background-color: %1;").arg(color.name()));
paletteLayout.addWidget(label);
}
// ウィンドウを作成
QWidget window;
window.setLayout(&paletteLayout);
window.setWindowTitle("カラーパレット");
window.show();
return app.exec();
}
このコードを実行すると、以下のようなウィンドウが表示されます。
例2: 画像のカラー変換
この例では、QRgbaFloat::fromRgba64()関数を使用して、画像のカラーをグレースケールに変換します。
#include <QApplication>
#include <QLabel>
#include <QImage>
#include <QVBoxLayout>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 画像を読み込む
QImage image("image.png");
// グレースケール画像を作成
QImage grayscaleImage = image;
for (int y = 0; y < image.height(); ++y) {
for (int x = 0; x < image.width(); ++x) {
QRgb pixel = image.pixel(x, y);
QRgbaFloat color = QRgbaFloat::fromRgba(pixel);
float grayscale = 0.2126 * color.red() +
0.7152 * color.green() +
0.0722 * color.blue();
QRgbaFloat grayscaleColor = QRgbaFloat::fromHsl(grayscale, 1.0, 1.0);
grayscaleImage.setPixel(x, y, grayscaleColor.toRgba());
}
}
// ウィンドウを作成
QVBoxLayout layout;
QLabel *originalLabel = new QLabel;
originalLabel->setPixmap(image.scaledToWidth(250));
layout.addWidget(originalLabel);
QLabel *grayscaleLabel = new QLabel;
grayscaleLabel->setPixmap(grayscaleImage.scaledToWidth(250));
layout.addWidget(grayscaleLabel);
QWidget window;
window.setLayout(&layout);
window.setWindowTitle("画像のカラー変換");
window.show();
return app.exec();
}
この関数の代替方法として、以下の方法が考えられます。
QColor::fromRgba64()関数を使用する
QColor::fromRgba64()関数は、16ビット整数値4つで表現されたRGBAカラー値を、QColor型に変換します。QRgbaFloat型に変換したい場合は、QColor::toRgbaF()関数を使用することで、QRgbaFloat型に変換できます。
QRgbaFloat color = QColor::fromRgba64(0xFFFF, 0x0000, 0x0000, 0xFF00).toRgbaF();
QVector<float>を使用する
QVector<float>を使用して、4つの浮動小数点値を格納することもできます。
QVector<float> color = {1.0, 0.0, 0.0, 1.0};
手動で変換する
以下の式を使用して、手動で変換することもできます。
QRgbaFloat color;
color.setRed(static_cast<float>(red) / 65535.0);
color.setGreen(static_cast<float>(green) / 65535.0);
color.setBlue(static_cast<float>(blue) / 65535.0);
color.setAlpha(static_cast<float>(alpha) / 65535.0);
それぞれの方法のメリットとデメリット
- 手動で変換する
- メリット: 最も柔軟性が高い。
- デメリット: コードが複雑になる。
- QVector<float>を使用する
- メリット: シンプルで分かりやすい。
- デメリット: QRgbaFloat型に明示的に変換する必要がある。
- QColor::fromRgba64()関数を使用する
- メリット: QColor型は、Qt GUIライブラリで広く使用されているため、使いやすい。
- デメリット: QRgbaFloat型に変換するために、QColor::toRgbaF()関数を使用する必要がある。
- QRgbaFloat型を直接使用したい場合は、QVector<float>を使用するか、手動で変換する必要があります。
- シンプルで分かりやすい方法が必要な場合は、QColor::fromRgba64()関数を使用するのがおすすめです。