2017-04-17 24 views
0

QGraphicsView와 Scene을 통해 두 개의 QGraphicsPixmap 항목이 설정되어 있습니다. 하나는 이미지를 보여주고 있고, 다른 하나는 마킹을 보여주는 데 사용되는 투명한 pixmap을 가지고 있습니다.픽스맵을 통한 qpainter의 드로잉 제한

qpainter를 사용하여 투명한 qpixmap을 그립니다.

필자는 펜 모양의 둥근 점이있는 qpen을 사용하여 두 점 사이에 drawline을 사용하고 있습니다.

문제입니다 : 내가 이미지가 투명한의 일부 일부 PNG로 이미지를로드하는 경우

, 나는 이미지의 투명 영역 이상 (픽스맵 마킹에) 표시하지 않도록합니다. qpainter의 마킹 영역을 자동으로 제한 할 수있는 방법이 있습니까?

답변

1

2 개의 픽스맵을 하나의 QGraphicsPixmapItem으로 결합하는 것이 가장 쉽습니다. 그럼 당신은 단순히 소스 픽셀의 알파 감소 소스 픽셀의 알파와 대상의 상단에 혼합되어

QPainter::CompositionMode_SourceAtop

할 필요가 올바른 QPainter::CompositionMode을 사용할 수 있습니다 목적지 픽셀.

예컨대 :

QPixmap markingPixmap(sourceImage.size()); 
markingPixmap.fill(Qt::transparent); 

{ // scope for painter1 
    QPainter painter1(&markingPixmap); 
    painter1.setPen(...); 
    painter1.drawLine(...); 
} 

QPainter painter(&sourceImage); 
painter.setCompositionMode(QPainter::CompositionMode_SourceAtop); 
painter.drawPixmap(0, 0, markingPixmap); 

(! 코드 안된)는


또는 당신은 심지어 QBitmap 사용할 수, QPainter::drawPixmap()를 참조하십시오

pixmap이 QBitmap이면 펜 색상을 사용하여 "설정"된 비트가 그려집니다. backgroundMode가 Qt :: OpaqueMode이면 "unset"비트는 배경 브러시의 색상을 사용하여 그려집니다. backgroundMode가 Qt :: TransparentMode이면 "unset"비트가 투명합니다. 그래디언트 또는 텍스처 색상으로 비트 맵 그리기는 지원되지 않습니다.

(당신이이 CompositionMode을 존중한다면, 시도 할 필요가있을 것이다.)