mirror of
https://github.com/JakubMelka/PDF4QT.git
synced 2025-06-05 21:59:17 +02:00
Show shape/opacity channel
This commit is contained in:
@ -50,6 +50,8 @@ OutputPreviewDialog::OutputPreviewDialog(const pdf::PDFDocument* document, pdf::
|
|||||||
ui->displayModeComboBox->addItem(tr("Color Warnings | Ink Coverage"), OutputPreviewWidget::ColorWarningInkCoverage);
|
ui->displayModeComboBox->addItem(tr("Color Warnings | Ink Coverage"), OutputPreviewWidget::ColorWarningInkCoverage);
|
||||||
ui->displayModeComboBox->addItem(tr("Color Warnings | Rich Black"), OutputPreviewWidget::ColorWarningRichBlack);
|
ui->displayModeComboBox->addItem(tr("Color Warnings | Rich Black"), OutputPreviewWidget::ColorWarningRichBlack);
|
||||||
ui->displayModeComboBox->addItem(tr("Ink Coverage"), OutputPreviewWidget::InkCoverage);
|
ui->displayModeComboBox->addItem(tr("Ink Coverage"), OutputPreviewWidget::InkCoverage);
|
||||||
|
ui->displayModeComboBox->addItem(tr("Shape Channel"), OutputPreviewWidget::ShapeChannel);
|
||||||
|
ui->displayModeComboBox->addItem(tr("Opacity Channel"), OutputPreviewWidget::OpacityChannel);
|
||||||
ui->displayModeComboBox->setCurrentIndex(0);
|
ui->displayModeComboBox->setCurrentIndex(0);
|
||||||
|
|
||||||
ui->imageWidget->setInkMapper(&m_inkMapper);
|
ui->imageWidget->setInkMapper(&m_inkMapper);
|
||||||
|
@ -58,6 +58,8 @@ void OutputPreviewWidget::clear()
|
|||||||
m_alarmCoverageImage.dirty();
|
m_alarmCoverageImage.dirty();
|
||||||
m_alarmRichBlackImage.dirty();
|
m_alarmRichBlackImage.dirty();
|
||||||
m_inkCoverageImage.dirty();
|
m_inkCoverageImage.dirty();
|
||||||
|
m_shapeMask.dirty();
|
||||||
|
m_opacityMask.dirty();
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,6 +82,8 @@ void OutputPreviewWidget::setPageImage(QImage image, pdf::PDFFloatBitmapWithColo
|
|||||||
m_alarmCoverageImage.dirty();
|
m_alarmCoverageImage.dirty();
|
||||||
m_alarmRichBlackImage.dirty();
|
m_alarmRichBlackImage.dirty();
|
||||||
m_inkCoverageImage.dirty();
|
m_inkCoverageImage.dirty();
|
||||||
|
m_shapeMask.dirty();
|
||||||
|
m_opacityMask.dirty();
|
||||||
|
|
||||||
buildInfoBoxItems();
|
buildInfoBoxItems();
|
||||||
update();
|
update();
|
||||||
@ -147,6 +151,28 @@ void OutputPreviewWidget::paintEvent(QPaintEvent* event)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case ShapeChannel:
|
||||||
|
{
|
||||||
|
const QImage& image = getShapeImage();
|
||||||
|
if (!image.isNull())
|
||||||
|
{
|
||||||
|
painter.translate(0, (pageImageRect.height() - image.height()) / 2);
|
||||||
|
painter.drawImage(pageImageRect.topLeft(), image);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case OpacityChannel:
|
||||||
|
{
|
||||||
|
const QImage& image = getOpacityImage();
|
||||||
|
if (!image.isNull())
|
||||||
|
{
|
||||||
|
painter.translate(0, (pageImageRect.height() - image.height()) / 2);
|
||||||
|
painter.drawImage(pageImageRect.topLeft(), image);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Q_ASSERT(false);
|
Q_ASSERT(false);
|
||||||
}
|
}
|
||||||
@ -398,6 +424,7 @@ void OutputPreviewWidget::buildInfoBoxItems()
|
|||||||
case Separations:
|
case Separations:
|
||||||
case ColorWarningInkCoverage:
|
case ColorWarningInkCoverage:
|
||||||
case ColorWarningRichBlack:
|
case ColorWarningRichBlack:
|
||||||
|
case InkCoverage:
|
||||||
{
|
{
|
||||||
if (m_originalProcessBitmap.getWidth() > 0 && m_originalProcessBitmap.getHeight() > 0)
|
if (m_originalProcessBitmap.getWidth() > 0 && m_originalProcessBitmap.getHeight() > 0)
|
||||||
{
|
{
|
||||||
@ -502,7 +529,8 @@ void OutputPreviewWidget::buildInfoBoxItems()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case InkCoverage:
|
case ShapeChannel:
|
||||||
|
case OpacityChannel:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -559,6 +587,12 @@ void OutputPreviewWidget::buildInfoBoxItems()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_displayMode == ShapeChannel || m_displayMode == OpacityChannel)
|
||||||
|
{
|
||||||
|
addInfoBoxSeparator();
|
||||||
|
addInfoBoxHeader(tr("Shape/Opacity"));
|
||||||
|
}
|
||||||
|
|
||||||
if (sampleColor.isValid())
|
if (sampleColor.isValid())
|
||||||
{
|
{
|
||||||
addInfoBoxSeparator();
|
addInfoBoxSeparator();
|
||||||
@ -610,6 +644,16 @@ const OutputPreviewWidget::InkCoverageInfo& OutputPreviewWidget::getInkCoverageI
|
|||||||
return m_inkCoverageImage.get(this, &OutputPreviewWidget::getInkCoverageInfoImpl);
|
return m_inkCoverageImage.get(this, &OutputPreviewWidget::getInkCoverageInfoImpl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const QImage& OutputPreviewWidget::getShapeImage() const
|
||||||
|
{
|
||||||
|
return m_shapeMask.get(this, &OutputPreviewWidget::getShapeImageImpl);
|
||||||
|
}
|
||||||
|
|
||||||
|
const QImage& OutputPreviewWidget::getOpacityImage() const
|
||||||
|
{
|
||||||
|
return m_opacityMask.get(this, &OutputPreviewWidget::getOpacityImageImpl);
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<pdf::PDFColorComponent> OutputPreviewWidget::getInkCoverageImpl() const
|
std::vector<pdf::PDFColorComponent> OutputPreviewWidget::getInkCoverageImpl() const
|
||||||
{
|
{
|
||||||
std::vector<pdf::PDFColorComponent> result;
|
std::vector<pdf::PDFColorComponent> result;
|
||||||
@ -772,6 +816,26 @@ OutputPreviewWidget::InkCoverageInfo OutputPreviewWidget::getInkCoverageInfoImpl
|
|||||||
return coverageInfo;
|
return coverageInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QImage OutputPreviewWidget::getShapeImageImpl() const
|
||||||
|
{
|
||||||
|
if (!m_originalProcessBitmap.getPixelFormat().hasShapeChannel())
|
||||||
|
{
|
||||||
|
return QImage();
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_originalProcessBitmap.getChannelImage(m_originalProcessBitmap.getPixelFormat().getShapeChannelIndex());
|
||||||
|
}
|
||||||
|
|
||||||
|
QImage OutputPreviewWidget::getOpacityImageImpl() const
|
||||||
|
{
|
||||||
|
if (!m_originalProcessBitmap.getPixelFormat().hasOpacityChannel())
|
||||||
|
{
|
||||||
|
return QImage();
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_originalProcessBitmap.getChannelImage(m_originalProcessBitmap.getPixelFormat().getOpacityChannelIndex());
|
||||||
|
}
|
||||||
|
|
||||||
pdf::PDFColorComponent OutputPreviewWidget::getRichBlackLimit() const
|
pdf::PDFColorComponent OutputPreviewWidget::getRichBlackLimit() const
|
||||||
{
|
{
|
||||||
return m_richBlackLimit;
|
return m_richBlackLimit;
|
||||||
|
@ -40,7 +40,9 @@ public:
|
|||||||
Separations,
|
Separations,
|
||||||
ColorWarningInkCoverage,
|
ColorWarningInkCoverage,
|
||||||
ColorWarningRichBlack,
|
ColorWarningRichBlack,
|
||||||
InkCoverage
|
InkCoverage,
|
||||||
|
ShapeChannel,
|
||||||
|
OpacityChannel
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual QSize sizeHint() const override;
|
virtual QSize sizeHint() const override;
|
||||||
@ -107,11 +109,15 @@ private:
|
|||||||
const AlarmImageInfo& getAlarmCoverageImage() const;
|
const AlarmImageInfo& getAlarmCoverageImage() const;
|
||||||
const AlarmImageInfo& getAlarmRichBlackImage() const;
|
const AlarmImageInfo& getAlarmRichBlackImage() const;
|
||||||
const InkCoverageInfo& getInkCoverageInfo() const;
|
const InkCoverageInfo& getInkCoverageInfo() const;
|
||||||
|
const QImage& getShapeImage() const;
|
||||||
|
const QImage& getOpacityImage() const;
|
||||||
|
|
||||||
std::vector<pdf::PDFColorComponent> getInkCoverageImpl() const;
|
std::vector<pdf::PDFColorComponent> getInkCoverageImpl() const;
|
||||||
AlarmImageInfo getAlarmCoverageImageImpl() const;
|
AlarmImageInfo getAlarmCoverageImageImpl() const;
|
||||||
AlarmImageInfo getAlarmRichBlackImageImpl() const;
|
AlarmImageInfo getAlarmRichBlackImageImpl() const;
|
||||||
InkCoverageInfo getInkCoverageInfoImpl() const;
|
InkCoverageInfo getInkCoverageInfoImpl() const;
|
||||||
|
QImage getShapeImageImpl() const;
|
||||||
|
QImage getOpacityImageImpl() const;
|
||||||
|
|
||||||
enum InfoBoxStyle
|
enum InfoBoxStyle
|
||||||
{
|
{
|
||||||
@ -150,6 +156,8 @@ private:
|
|||||||
mutable pdf::PDFCachedItem<AlarmImageInfo> m_alarmCoverageImage;
|
mutable pdf::PDFCachedItem<AlarmImageInfo> m_alarmCoverageImage;
|
||||||
mutable pdf::PDFCachedItem<AlarmImageInfo> m_alarmRichBlackImage;
|
mutable pdf::PDFCachedItem<AlarmImageInfo> m_alarmRichBlackImage;
|
||||||
mutable pdf::PDFCachedItem<InkCoverageInfo> m_inkCoverageImage;
|
mutable pdf::PDFCachedItem<InkCoverageInfo> m_inkCoverageImage;
|
||||||
|
mutable pdf::PDFCachedItem<QImage> m_opacityMask;
|
||||||
|
mutable pdf::PDFCachedItem<QImage> m_shapeMask;
|
||||||
|
|
||||||
QImage m_pageImage;
|
QImage m_pageImage;
|
||||||
pdf::PDFFloatBitmapWithColorSpace m_originalProcessBitmap;
|
pdf::PDFFloatBitmapWithColorSpace m_originalProcessBitmap;
|
||||||
|
Reference in New Issue
Block a user