2011-04-10 1 views
2

QPixmap을 사용하여 그릴 QPixmap을 만들고 싶습니다. QPixmap은 미리 곱한 색상 채널을 사용하지 않고 투명도를 지원해야합니다.PyQt : 미리 곱한 색상 채널이 아닌 알파 채널로 QPixmap 만들기

현재 저는 원하는 치수로 QPixmap을 생성하고 각 채널 (알파 포함)에 대해 0으로 설정된 QColor로 채 웁니다.

tex = QtGui.QPixmap(width, height) 
c = QtGui.QColor(0) 
c.setAlpha(0) 
tex.fill(c) 

이렇게하면 QPixmap에 투명성이 추가됩니다. 그러나 QPainter를 사용하여 QPixmap에 그릴 경우 그려지는 색상 값에 소스의 알파 값이 미리 곱해집니다. QPixmap이 나중에 QGLWidget의 텍스처로 사용되고 QPixmap의 알파 채널 (이제는 QPainter를 사용하여 그린 소스의 알파)을 렌더링 할 때 다시 색상 채널에 곱하기 때문에 QPixmap이 필요하지 않습니다. 알파가 두 배로 곱해진다.

QPixmap 대신 QtGui.QImage.Format_ARGB32 형식의 QImage를 사용하면 색상 채널이 미리 곱되지 않고 알파가 한 번만 적용됩니다. 그러나 이것은 렌더링하는 동안 너무 느립니다. 위의 형식으로 QImages를 그린 다음 QPixmaps로 변환하려고했지만 동일한 결과 (미리 곱한 색상 채널에 알파 채널을 다시 곱함)가 있습니다. 트롤 테크의 문서는 QPixmap가 RGB32 또는 미리 곱셈 알파 형식을 사용하여 저장 입니다

시스템에 따라 말한다. 이미지에 알파 채널이 있고 시스템에서 허용하는 경우 기본 형식은 미리 곱한 알파입니다.

저는 X (Linux)를 사용하고 있습니다. 해당 QPixmap에 알파 채널이있을 때 QPixmap이 미리 색 채널을 사용하지 않도록 할 수있는 방법이 있습니까?

답변

0

필자가 호출 한 QGLWidget :: bindTextures의 수를 최소화하여 QImages를 사용하고 코드를 최적화했습니다. 미리 곱해진 QPixmaps가 반투명 텍스처로 사용될 수있는 방법에 대한 만족스러운 답변을 아직받지 못했지만 프로그램 성능에 만족하고 더 이상이 스레드를 검사하지 않습니다.