QImage와 QPixmap의 차이점은 무엇입니까?


84

QImage와 QPixmap의 차이점을 이해하지 못하며 동일한 기능을 제공하는 것 같습니다. QImage는 언제 사용해야하며 QPixmap은 언제 사용해야합니까?


질문을 이해했는지 잘 모르겠지만 문서에서 "QImage는 I / O, 직접 픽셀 액세스 및 조작을 위해 설계 및 최적화 된 반면 QPixmap은 이미지 표시를 위해 설계 및 최적화되었습니다. 화면에." doc.qt.nokia.com/latest/qpixmap.html#details
cgmb

1
네! 나는 그것을 발견했지만 잘 이해하지 못했습니다. 예를 들어 I / O에 최적화되고 표시에 최적화되어 있습니다. picutre가 다른 플랫폼에서 보여준 차이입니까? .. 설명하는 단계를 도와 주실 수 있나요 .. 감사합니다 ..
Mr.Tu

무슨 뜻인지 아직 100 % 확신 할 수는 없지만 QWidgets를 사용하는 경우 QLabel에 표시 할 수 있습니다. QGraphicsView를 사용하는 경우 QGraphicsPixmapItem에 표시 할 수 있습니다. QML을 사용하는 경우 Image 요소가 모든 것을 처리합니다.
cgmb 2012

다른 말로하겠습니다. 엔진이란 무엇이며 그 작업은 무엇입니까? 언제 사용합니까?
Mr.Tu

답변:


55

QImageQPixmap 에 대한 문서를 읽고 쉽게 대답했습니다 .

QPixmap의 클래스가있다 오프 스크린 페인트 장치로서 사용될 수있다 이미지 표현.

QImage의 클래스는 화소 데이터에 직접 액세스 할 수 있으며, 페인트 장치로 사용될 수있는 하드웨어에 독립적 인 영상 표현을 제공한다.

편집 : 또한 @Dave의 답변에서 :

GUI 스레드 밖에서는 QPixmap을 조작 할 수 없지만 QImage에는 그러한 제한이 없습니다.

그리고 @Arnold에서 :

다음은 일반적으로 (항상은 아님) 적용되는 간단한 요약입니다.

  • 이미지를 조작, 수정, 픽셀 변경 등을 계획하는 경우 QImage를 사용하십시오.
  • 같은 이미지를 화면에 두 번 이상 그리려면 QPixmap으로 변환하십시오.

당신의 도움을 주셔서 감사합니다 ... 일반 프로세스가 QPixmpa과 QImage 사진을로드하는 것이 무엇인가 .. 메모리에 무슨 .. .. 감사합니다
Mr.Tu

뭘 하려는지 잘 모르겠지만 이 질문 에서는 디스크에서 YV12 데이터를로드하고 GLSL 조각 셰이더를 사용하여 RGB로 변환 한 다음 QImage 내부의 화면에 표시하는 방법을 보여줍니다. 당신이 성취하고자하는 것에 대해 더 명확하다면 올바른 방향을 알려줄 수있을 것 같습니다.
karlphillip

14
이게 정말 답이 되나요?
spinkus

7
문서와 다른 사람의 대답을 복사하는 것은 의미가 없습니다.
Viacheslav Kroilov

48

Qt 그래픽 시스템에 대해 많은 것을 설명하는 멋진 기사 시리즈가 Qt Labs에 있습니다. 특히이 기사 에는 QImageQPixmap.

다음은 일반적으로 (항상은 아님) 적용되는 간단한 요약입니다.

  • 이미지를 조작하거나, 수정하거나, 픽셀을 변경하려는 경우 QImage.
  • 같은 이미지를 화면에 두 번 이상 그리려면 QPixmap.

감사합니다. 이 구절은 우리에게 말합니다. 그림을로드하는 두 가지 방법, 래스터와 OpenGL이 있습니까? 맞아?
Mr.Tu

나는 그 질문을 잘 이해하지 못한다. "래스터"나 "OpenGL"은 구체적으로 그림을로드하는 방법을 나타내지 않습니다.
Arnold Spence 2012

37

한 가지 중요한 차이점은 QPixmap기본 GUI 스레드 외에는를 만들거나 조작 할 수 없다는 것입니다. 그러나 QImage백그라운드 스레드에서 인스턴스를 만들고 조작 한 다음 GUI 스레드로 다시 전달한 후 변환 할 수 있습니다.


22

산업 환경에서 중요 :

QPixmap은 디스플레이를 수행하는 비디오 카드에 저장됩니다. QImage가 아닙니다.

따라서 응용 프로그램을 실행하는 서버와 디스플레이를 수행하는 클라이언트 스테이션이있는 경우 네트워크 사용 측면에서 매우 중요합니다.

Pixmap에서 Redraw는 네트워크를 통해 다시 그리기 (몇 바이트) 명령 만 보내는 것으로 구성됩니다.

QImage를 사용하면 전체 이미지를 보내는 것으로 구성됩니다 (약 몇 MB).


19
  • QPixmappixel코드에서 표현이 중요 하지 않은 "이미지 객체"입니다 . 따라서 QPixmap은 디스플레이 화면에서 이미지를 렌더링하도록 설계 및 최적화 되어 있으며 X11을 사용할 때 XServer에 저장되므로 XWindow에서 QPixmap을 그리는 것이 드로잉보다 훨씬 빠릅니다. 데이터가 이미 서버에 있고 사용할 준비가되어 있으므로 QImages.

    QPixmap을 사용하는 경우 : 특히 기존 이미지 (아이콘 .. 배경 .. 등)를 반복적으로 그리려면 QPixmap을 사용하십시오.

  • QImage클라이언트 코드의 "메모리의 픽셀 배열"이며 , QImage는 I / O, 직접 픽셀 액세스 및 조작을 위해 설계 및 최적화되었습니다.

    QImage 사용시기 : Qpaint 를 사용 하여 그림을 그리거나 이미지 픽셀을 조작하려는 경우.

  • QBitmap 은 단색 (1 비트 깊이) 픽스맵 인 1의 깊이를 보장하는 편리한 QPixmap 서브 클래스입니다. QPixmap과 마찬가지로 QBitmap은 암시 적 데이터 공유를 사용하도록 최적화되어 있습니다.

  • QPicture 는 QPainter 명령 (귀하의 그림)을 기록하고 재생하는 페인트 장치입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.