質問
私はQT GUIアプリケーションを構築し、開口部のイメージにQImageのを使用しています。 私の問題は、(私はQImageののビットを使用する方法を見つけ出すことができないということです)と走査線() メソッドピクセルあたりのレベルでのアクセスを得るために。
私はこのポスト QtのQImageのピクセル操作の問題を見てきましたの これは、それぞれの行の最初のピクセルのためのものです。これは正しいですか私はそれをすべて間違っていましたか?
事前のおかげで。
解決
像の高さに
scanlines
に対応し、列は、画像の幅に相当する。
文書によると、uchar* QImage::scanline(int i)
、または類似const
バージョンのようなプロトタイプのルックスます。
しかし、データはマシンのアーキテクチャとイメージに依存しているのでコメンターは、指摘したように、あなたはをしないの直接uchar *
を使用する必要があります。代わりに、次のような使用何かます:
QRgb *rowData = (QRgb*)img.scanLine(row);
QRgb pixelData = rowData[col];
int red = qRed(pixelData);
他のヒント
それはKalebのポストからすぐに明らかでないかもしれませんが、Format_RGB32画像上のピクセルを設定するため、次の作品ます。
// Get the line we want
QRgb *line = (QRgb *)image->scanLine(row_index);
// Go to the pixel we want
line += col_index;
// Actually set the pixel
*line = qRgb(qRed(color), qGreen(color), qBlue(color));
答えは私のために動作しませんでした。これは、データが32ビット、私のシステムにアラインされていない、のように見えます。 正しいデータを取得するには、私のシステム上で、私はこれをしなければならなかった。
for(uint32_t Y = 0; Y < mHeight; ++Y)
{
uint8_t* pPixel = Image.scanLine(Y);
for(uint32_t X = 0; X < mWidth; ++X)
{
const int Blue = *pPixel++;
const int Green = *pPixel++;
const int Red = *pPixel++;
uint8_t GrayscalePixel = (0.21f * Red) + (0.72f * Green) + (0.07 * Blue);
}
}
所属していません StackOverflow