래스터 그래픽 편집 응용 프로그램을 개발 중입니다. 이 응용 프로그램에서는 QImage 클래스의 scanline 함수와 동일한 작업을 수행 할 scanline 함수를 만들어야합니다. 그러나 나는 주사선 기능이 작동하는 방식과 일반적으로 주사선을 사용하는 방식과 다소 혼동을 느낍니다. 예를 들어, 높이가 177px 인 이미지에 대해 bytesPerLine()을 호출하면 해당 값이 531 (각 픽셀 당 3 바이트)이지만이 함수는 520을 반환 할 것으로 기대하고 있었습니까? 또한qimage 클래스의 scanline 함수
, I는 가변 데이터 (249) R = G = B = 249 249 값 uchar data = image->scanLine(y)[x]
를 사용하여 255 I 가 실제로이 값을 이해하지 못하고있다. 미리 감사드립니다.
저는 각 픽셀이 RGBA 인 4 바이트가 될 것으로 기대합니다. 255는 아마도 알파 채널입니다. 다음 2 바이트를 확인하십시오. –
후속으로,'QImage'가 어떤 형식으로 구성되었는지 알고 있습니까? 이것은 주어진 픽셀의 크기와 바이트의 크기에 직접적인 영향을 미친다. 문서의 내용 : > 32 비트 이미지 데이터에 액세스하는 경우 반환 된 포인터를 QRgb *로 캐스팅하고 (QRgb는 32 비트 크기 임) 픽셀 값을 읽거나 쓸 때 사용합니다. 픽셀 형식은 기본 플랫폼의 바이트 순서에 따라 다르기 때문에 uchar * 포인터를 직접 사용할 수 없습니다. qRed(), qGreen(), qBlue() 및 qAlpha()를 사용하여 픽셀에 액세스하십시오. –
@EvanTeran : QImage는 Format_RGB32 형식으로 생성되었습니다. 나는 qRgb에 포인터를 반환해야한다고 생각하지만 캐스팅하지 않고 색상에 액세스하는 데 관심이 있습니다. image-> scanLine (y) [x]에 의해 반환 된 값에서 어떤 색상 값에 액세스했는지 이해할 수 없습니다. – Mirzet