2012-09-24 2 views
1

QPainter::drawImage과 비슷한 작업을 수행해야하지만, 사각형으로 작업하는 대신 주어진 그림의 삼각형 부분 (위젯의 삼각형 영역)을 그립니다.Qt : 삼각형 이미지 그리기

어떻게하면 모든 픽셀을 다시 그리는 것 외에도 할 수있는 아이디어가 있습니까?

통찰력을 가져 주셔서 감사합니다.

답변

1

하면 QImage 대신 QPixmap를 사용하는 것이 가능한 경우, 도시 된 픽셀을 정의하고 투명한되는 QPixmap 위해 할 set a bitmap mask 수 : 여기

myPixmap->setMask(myTriangleMask); 
painter->drawPixmap(myPixmap); 

기반 다른 해결책 QImage에 :

MaskWidget::MaskWidget(QWidget* parent) : QWidget(parent) { 
    img = QImage("Sample.jpg");  // The image to paint 
    mask = QImage("Mask.png");  // An indexed 2-bit colormap image 
    QPainter imgPainter(&img); 
    imgPainter.drawImage(0, 0, mask); // Paint the mask onto the image 
} 

void MaskWidget::paintEvent (QPaintEvent * event) { 
    QPainter painter(this); 
    painter.drawImage(10, 10, img); 
} 

Mask.png는 Sample.jpg와 같은 크기의 이미지 파일입니다. 투명도를 지원하는 알파 채널을 포함합니다. 김프로이 파일을 쉽게 만들 수 있습니다. 알파 채널을 추가하고 내가 원하는 모든 영역을 투명하게 변경하고 다른 모든 영역을 흰색으로 변경했습니다. 크기를 줄이기 위해 마침내 인덱스 화 된 2 비트 이미지로 변환했습니다. 삼각형을 다양한 매개 변수를 기반으로 계산해야하는 경우 Qt를 사용하여 프로그래밍 방식으로 마스크 이미지를 만들 수도 있습니다.

+0

답변 해 주셔서 감사합니다. 나는 이것을보고 다시 여기로 올거야. – Seub

+0

안녕하세요, 다시 한 번 귀하의 답변에 감사드립니다. 불행히도, 나는 이것이 내가하고 싶은 일을 위해 잘 작동하지 않을 것이라고 생각합니다. 우선 삼각형 마스크를 프로그래밍 방식으로 정의하고 싶을 것이고 까다로울 수 있기 때문입니다. 둘째, 수천 개의 삼각형을 그려야하므로 매우 효율적인 작업이 필요합니다. 나는 좀 더 정확한 질문을 했어야했는데, 곧 그렇게 할 수 있었다. 나는 당신의 시간 중 일부를 사용하는 것에 대해 사과했다. – Seub