QImage에서 이미지 색상에 액세스하려고합니다.RGB32 및 인덱싱 된 유형 이미지 모두에서 이미지 색상 정보 가져 오기
내가 주사선 기능을 기반으로 문서의 대부분을 발견하는 방법 ...
나는 시도하고 일했다 ... RGB32 이미지에. 정확한 방법을 사용하여 8 비트 색인 또는 흑백 이미지에 대한 색상 데이터를 얻을 때 놀랍고 불쾌한 결과를 얻었습니다. 이미지가 인덱스 또는 흑백, 나는 점점 색을 만드는 오류를 가지고 8 비트와 동일한 코드를 실행
// note RGBTriple is a struct containing unsigned R, G, B
// rgbImage.pixels is a RGBTriple* array
RGBTriple* pTriple = rgbImage.pixels;
for (int y = 0; y < source.height(); y++)
{
const unsigned char* pScanLine = source.scanLine(y);
for (int x = 0; x < source.width(); x++)
{
QRgb* color = (QRgb*)pScanLine;
pTriple->R = qRed(*color);
pTriple->G = qGreen(*color);
pTriple->B = qBlue(*color);
++pTriple;
pScanLine += 4;
}
}
:
이
내 코드이었다. 문서는 주사선이 32b의 배수로 정렬되었다고 말합니다. 그러나 8과 2의 배수이기 때문에 문제가 될 것이라고는 생각하지 않았습니다. 그것은 느린이나 다른 예기치 않은 동작을한다면 내가 입력 이미지의 모든 유형에 대한 올바른 결과를 얻고 있지 오전 발견되면, 나는
완벽하게RGBTriple* pTriple = rgbImage.pixels;
for (int y = 0; y < source.height(); y++)
{
for (int x = 0; x < source.width(); x++)
{
pTriple->R = qRed(source.pixel(x, y));
pTriple->G = qGreen(source.pixel(x, y));
pTriple->B = qBlue(source.pixel(x, y));
++pTriple;
}
}
작품에 변경 ... 궁금 ? 결국, 인덱스 된 이미지에서도 pixel() 함수를 사용하여 색상 정보를 얻습니다. 실제로는 다르게 저장해야합니다 ... 실패 할 것 같아서 ...
scanline을 사용하는 첫 번째 버전은 다른 이미지 유형에서도 작동합니까?
왜 데이터를 얻기 위해 스캔 라인을 사용하는 것이 바람직한 방법입니까?
"느린"적어도 – hyde