2016-06-20 3 views
3

Qt에서 어떻게 바이트 배열 ('uint8_t *`)에서 QImage 객체를 생성 할 수 있습니까? 딥 카피를 만들지 않고 그냥 내 데이터 배열을 참조 하시겠습니까? 문서로 예를버퍼에서 QImage를 작성하십시오.

QImage::QImage(uchar *data, 
       int width, 
       int height, 
       int bytesPerLine, 
       Format format, 
       QImageCleanupFunction cleanupFunction = Q_NULLPTR, 
       void *cleanupInfo = Q_NULLPTR) 

에 대한

+0

[docs] (http://doc.qt.io/qt-4.8/qimage.html#loadFromData)는이 방법으로 바이트 배열을로드 할 것을 제안합니다. 길이 매개 변수로 인해 복사하고 아마도 데이터를 변경시켜 딥 복사를 수행하는 이유는 무엇입니까? – kirinthos

+2

'QImage :: QImage (const uchar * 데이터, int 너비, int 높이, 형식 형식)'문서에서 깊은 사본이없는 것처럼 보입니다. Q ************************************************************************************************************************************************************************* 이미지가 파괴시 버퍼를 삭제하지 않습니다 *** – drescherjm

답변

6

사용하십시오 uchar *을 생성자의는 말한다 :

버퍼가 QImage의 삶과 모든 사본에 걸쳐 유효해야 함 수정되지 않았거나 원래 버퍼에서 분리되지 않았습니다. 이미지는 파기시 버퍼를 삭제하지 않습니다. 마지막 복사본이 소멸 될 때 호출 될 추가 포인터 cleanupInfo와 함께 함수 포인터 cleanupFunction을 제공 할 수 있습니다.

+0

해답을 가져 주셔서 감사합니다. 'QImage'에서 어떤 것을 딥 카피하지 않고'QPixmap'을 만드는 방법에 대해 알고 싶습니까? – manatttta

+1

QPixmap은 또 다른 이야기입니다 (왜 그렇게 필요합니까?). 올바른 형식의 QImage가 QPixmap으로 변환 할 때 딥 복사를 일으키지는 않을지 모르지만 그럴 수는 없습니다. Q 픽스맵에는 X 픽스맵과 같은 "서버 측"픽스맵이 있으므로 아이디어가 필요합니다. 이제 Qt 5 서버 측 그리기 코드가 Qt에서 제거되었으므로 QPixmap은 실제로 QImage에 의해 지원됩니다. QImage는 디스플레이에 표시하기 위해 기본 형식으로 표시됩니다. 어떤 형식이 구현 세부 사항의 일부가됩니다. 코드를 파헤쳐 올바른 방향으로 추측하면 사본이 필요하지 않습니다. – peppe

+0

좋은 설명! http://doc.qt.io/qt-5/qtwidgets-widgets-imageviewer-example.html에있는 것과 비슷한 이미지 시각화도를 만들기 때문에 QPixmap이 필요합니다. – manatttta

관련 문제