2013-11-28 5 views
1

3 비트 맵 이미지로 800 x 600을 받고 glDrawPixels()에 매개 변수로 제공합니다. 이것을 glDrawPixels에주기 전에, 비트 맵을 90도 회전시키고 싶습니다. 그게 가능하니?비트 맵 이미지를 회전하는 방법

QMatrix rm; 

rm.rotate(90); 

pixmap = pixmap.transformed(rm); 

pixmap.scaled(801, 701); 

texture = bindTexture(pixmap); 
liuyi.luo 응답으로
+0

QPixmap을 glDrawPixels의 매개 변수로 지정할 수 없습니다. 실제 * 코드가 무엇입니까? – peppe

+0

QMatrix는 더 이상 사용되지 않으며 대신 QTransform을 사용하십시오. –

+0

예, glDrawPixels에 전달하기 전에 BGR 배열이 있다고 상상해 봅니다. 어떻게 90도 회전시킬 수 있습니까? – Sam

답변

7
QImage srcImg(":/icon.png"); 
QPoint center = srcImg.rect().center(); 
QMatrix matrix; 
matrix.translate(center.x(), center.y()); 
matrix.rotate(90); 
QImage dstImg = srcImge.transformed(matrix); 
QPixmap dstPix = QPixmap::fromImage(dstImg); 
+0

내가 언급 한 바는 이것이 내가 찾는 것이 아니다. 나는 BGR raw data에 의해 8000 x 600 배열을 가지고있다. 이것을 glDrawPixels에주기 전에, 회전시키고 싶습니다. 어떻게? – Sam

+0

다시 한 번 배열에 헤더가없는 이미지 데이터가 포함되어 있음을 알 수 있습니다. 위의 코드는 png 헤더가있는 이미지 용입니다. – Sam

1

,이 일을 일반적인 방법은 사용하는 것입니다 :

이 경우는 비트 맵 및 PNG와 같은 대신 이미지 아니었다, 나는 다음을 수행 할 것 QImage 및 변환하기 전에 필수 형식의 원시 데이터를 전달하십시오.

불행히도 Qt는 BGR 채널 순서를 지원하지 않습니다. 타사 라이브러리를 찾아야하거나 자신의 알고리즘을 롤백해야합니다. 90도 회전하는 경우 매우 간단합니다. Here은 적절한 내부 회전을 적절히 구현합니다.

+0

이 방법은 까다 롭지 만 완전히 이해할 수는 없습니다. 정확히 비트 맵 크기를 읽을 때까지 3 x 800 x 600 x 3 패킷을 받고 배열에 추가합니다. 다음으로, 나는 지금 800 x 600의 배열을 3으로 처리하고 있는데, 어떻게 컬럼과 행을 바꿔야 하는가! – Sam

+0

구현에서 내 추측을 무시하면 전혀 작동하지 않습니다! 나는 시험되고 시험 된 것에 연결에서 편집했다. – cmannett85

관련 문제