0

ラスター グラフィックを編集するためのアプリケーションを開発しています。このアプリケーションでは、QImage クラスのスキャンライン関数と同じことを行うスキャンライン関数を作成する必要があります。しかし、スキャンライン関数の動作方法とスキャンライン全般については少し混乱しています。たとえば、高さが 177px の画像に対して bytesPerLine() を呼び出すと、値が 531 (ピクセルごとに 3 バイト) になると予想していましたが、この関数は 520 を返しますか?

また、 uchar data = image->scanLine(y)[x] 変数データの R=249 G=249 B=249 の値に 255 を使用すると、この値がよくわかりません。前もって感謝します :)

4

1 に答える 1

1

QImage::format()信頼できる動作を得るには、生の画像データにアクセスする前に、の戻り値をチェックして、使用されている基本形式を確認する必要があります。

Qtは、アルファチャネルが存在するかどうかに関係なく、各ピクセルが4バイトを使用するトゥルーカラーのRGB32/フォーマットを好むようです(フォーマットの場合、単純にで埋められます)。トゥルーカラー画像を読み込む場合は、おそらくこれら2つの形式のいずれかです。ARGB32RGB320xff

さらに、バイト順序はプラットフォーム間で異なる可能性があり、QRgb可能な場合は常に32ビットピクセルにアクセスするために使用します。

ところで、スキャンラインは水平にすべきではありませんか?スキャンラインの長さを計算するwidth()代わりに使用する必要があると思います。height()

于 2011-12-03T03:48:08.377 に答える