Qt의 비디오 위에 투명 이미지 (QImage)가 오버레이되어 있습니다. 버튼을 클릭 할 때만 투명 이미지의 색상을 변경하고 싶습니다. 어떤 사람이 이것을하는 방법을 말해 줄 수 있습니까?Qt의 투명 이미지 색상 변경
감사합니다.
Qt의 비디오 위에 투명 이미지 (QImage)가 오버레이되어 있습니다. 버튼을 클릭 할 때만 투명 이미지의 색상을 변경하고 싶습니다. 어떤 사람이 이것을하는 방법을 말해 줄 수 있습니까?Qt의 투명 이미지 색상 변경
감사합니다.
이 작업은 여러 가지 방법으로 수행 할 수 있습니다. 새 이미지를 만들려면 QPainter
을 사용하는 것이 좋습니다. SourceIn
컴포지션 모드를 설정하면 시작 이미지의 알파 채널이 수행 할 드로잉에 적용됩니다. 원하는 색상으로 이미지를 채울 필요가 있습니다. QPixmap
의 표시 (및 페인트)하는 것이 더 효율적이기 때문에 내가 QPixmap
대신 QImage
를 사용
QPixmap source_image; // should be preserved in a class member variable
QRgb base_color; // desired image color
QPixmap new_image = source_image;
QPainter painter(&new_image);
painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
painter.fillRect(new_image.rect(), base_color);
painter.end();
ui->label->setPixmap(new_image); // showing result
참고. 어떤 이유로 든 QImage
을 계속 사용하려는 경우이 코드는 변경하지 않고 QImage
으로 작동합니다 (마지막 행은 제외).
원본 이미지 : 결과 :
이 방법을 시도했습니다. QImage :: Format_Indexed8 형식으로 이미지에 페인트 할 수 없다는 것입니다. 그것은 png 투명한 이미지이기 때문입니까? – Sid411
image-> setColor는 format8 이미지이므로 사용해 보았습니다. 이 경우에는 투명 한 영역까지 칠합니다. 투명하지 않은 부분 만 색을 지정하고 싶습니다. 감사합니다. – Sid411
투명성을 위해 Indexed8 형식이 필요하지 않습니다. ARGB32 형식이 일반적으로 사용됩니다. 이미지를 페인트 가능한 형식으로 변환하려면'source_image = source_image.convertToFormat (QImage :: Format_ARGB32); '을 사용하십시오. –
2 개 이미지와 그 –
사이의 스왑을하지만 색에 대해 서로 다른 범위를 설정합니다. 고정 된 색상 일 필요는 없습니다. 이 경우에는 무엇을 할 수 있습니까? – Sid411
"색상 변경"이란 무엇을 의미합니까? – Mitch