2016-11-21 2 views
1

Qt 및 Qt Graphics API를 처음 사용했습니다.QPixMap의 일부를 더 작은 QPixMap으로 바꿉니다.

나는 더 큰 QPixMap 및 더 작은 QPixMap을가집니다. 큰 부분의 부분 (QRect)을 작은 부분으로 교체해야합니다.

어떻게해야합니까?

감사합니다.

UPDATE

QPainter::drawPixmap()는 pImage-> p_PixMap로 표시되는 화상을 갱신하지 않는다.

코드

class GraphicImage : public QObject, 
    public QGraphicsPixmapItem 
{ 
    Q_OBJECT 

public: 
    GraphicImage(QPixmap* oImage,GraphiItemCtrl* pParent); 
    virtual ~GraphicImage(void); 
    QPixmap* p_PixMap; 
}; 
- - - - 
GraphicImage::GraphicImage(QPixmap* oImage,GraphiItemCtrl* pParent) 
    :QGraphicsPixmapItem(*oImage), p_Parent(pParent) 
{ 
    p_PixMap = oImage; 
} 
- - - - 
void GraphiItemCtrl::SetImagePortion(QString sFileName, QRect rect, QPixmap pChildPixMap) 
{ 
    GraphicImage* pImage = map_CurrentImages[sFileName]; 

    if (!pImage) 
     return; 

    pChildPixMap.save("test.jpg"); 
    QPixmap* pMap = pImage->p_PixMap; 
    QPainter pPainter(pMap); 

    pPainter.drawPixmap(rect, pChildPixMap); 
    qDebug() << rect.topLeft(); 
} 

pChildPixMap.save("test.jpg"); 문제없이 이미지의 필요한 부분을 절약 할 수 있습니다.

참고 : pImage는 QObject를하고 QGraphicsPixmapItem에서 상속됩니다. pMap은 아니다 NULL

+0

이 질문에 대한 답변은 http : // stackoverflow를 참조하십시오.com/questions/17888795/how-to-use-qpainter-on-qpixmap – zeFrenchy

답변

2

당신이 찾고있는 기능은 다음과 같습니다

void QPainter::drawPixmap(const QRect &rectangle, const QPixmap &pixmap) 

는 그것은 pixmap을 그릴 것입니다 화가의 목표 부분에 rectangle 부분으로

당신은이 중 하나를 사용할 수 있습니다 : 대상의 일부에 소스의 일부를 그릴 것입니다

void QPainter::drawPixmap(const QRect &target, const QPixmap &pixmap, const QRect &source) 

.

두 경우 모두 크기가 일치하지 않으면 이미지의 크기가 조정되므로 결과가 좋지 않은 경우 크기 조정 방법을 조정해야합니다.

this answer에 정의 된대로 setRenderHint(QPainter::SmoothPixmapTransform); 만 설정하면 최적의 결과를 얻지 못하는 것 같습니다. 최상의 품질을 원하면 수동으로 scale() 픽스맵을 작성한 다음 그릴 필요가 있습니다. 그러면 그림을 그리는 동안 즉석에서 크기를 조정하는 것보다 훨씬 나은 결과를 얻을 수 있습니다. 하나의 목적지에서 여러 이러한 픽스맵 그리기하는 경우

void draw(QPixmap &dst, const QRect &dstRect, const QPixmap &src) { 
    QPainter(dst).drawPixmap(dstRect, src); 
} 

, 당신은에 유지해야합니다

+0

그런 다음 출력 QPixMap을 추출하려면 어떻게해야합니까? –

+1

"추출"이란 무엇을 의미합니까? "출력"은 화가가 그려야 할 픽스맵입니다. – dtech

+0

그러면 대상 PixMap이 자동으로 업데이트됩니까? 나는 이것을 시도하고 돌아올 것이다. –

2

빠른 의사 :

QPainter painter(pixmap1); 
painter.drawPixmap(QRect, pixmap2); 

이 문서를 살펴 보자 here

+0

감사합니다. 나는 이것을 시도하고 돌아올 것입니다. –

+0

그러면'QPixMap' 결과를 어떻게 추출할까요? –

+0

@PraneethNilangaPeiris'drawPixmap'을 호출 할 픽스맵은 –

0

당신은 주어진 대상 사각형의 소스 픽스맵을 그릴 대상 픽셀 맵에 화가를 사용할 필요가 화가 - 반복적으로 새로운 화가를 만드는 것은 낭비 일 것입니다.

struct Replacement { 
    QRect dstRect; 
    QPixmap source; 
}; 

void draw(QPixmap &dst, const QList<Replacement> &replacements) { 
    QPainter painter{dst}; 
    for (auto & r : replacements) 
    painter.drawPixmap(r.dstRect, r.source); 
} 
관련 문제