Now we can use PNG, JPG, JPEG and BMP images

--HG--
branch : feature
This commit is contained in:
Valentina Zhuravska 2016-03-22 12:18:05 +02:00
parent 2efe06f444
commit 1d959cb747
4 changed files with 75 additions and 13 deletions

View File

@ -619,7 +619,12 @@ void DialogPatternProperties::InitImage()
QByteArray ba = QByteArray::fromBase64(byteArray); QByteArray ba = QByteArray::fromBase64(byteArray);
QBuffer buffer(&ba); QBuffer buffer(&ba);
buffer.open(QIODevice::ReadOnly); buffer.open(QIODevice::ReadOnly);
image.load(&buffer, "PNG"); // writes image into ba in PNG format QString extension = doc->GetImageExtension();
if (extension.isEmpty())
{
extension = "PNG";
}
image.load(&buffer, extension.toLatin1().data()); // writes image into ba in PNG format
ui->imageLabel->setPixmap(QPixmap::fromImage(image)); ui->imageLabel->setPixmap(QPixmap::fromImage(image));
ui->imageLabel->setContextMenuPolicy(Qt::CustomContextMenu); ui->imageLabel->setContextMenuPolicy(Qt::CustomContextMenu);
@ -641,7 +646,8 @@ void DialogPatternProperties::InitImage()
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::SetNewImage() void DialogPatternProperties::SetNewImage()
{ {
const QString fileName = QFileDialog::getOpenFileName(this, tr("Image for pattern"), QString(), tr("Images (*.png)")); const QString fileName = QFileDialog::getOpenFileName(this, tr("Image for pattern"), QString(),
tr("Images (*.png *.jpg *.jpeg *.bmp)"));
QImage image; QImage image;
if (fileName.isEmpty()) if (fileName.isEmpty())
{ {
@ -654,15 +660,24 @@ void DialogPatternProperties::SetNewImage()
return; return;
} }
ui->imageLabel->setPixmap(QPixmap::fromImage(image)); ui->imageLabel->setPixmap(QPixmap::fromImage(image));
QFileInfo f(fileName);
QString extension = f.suffix().toUpper();
QByteArray byteArray; if (extension == "JPEG")
QBuffer buffer(&byteArray); {
buffer.open(QIODevice::WriteOnly); extension = "JPG";
image.save(&buffer, "PNG"); // writes the image in PNG format inside the buffer }
QString iconBase64 = QString::fromLatin1(byteArray.toBase64().data()); if (extension == "PNG" || extension == "JPG" || extension == "BMP")
{
QByteArray byteArray;
QBuffer buffer(&byteArray);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, extension.toLatin1().data()); // writes the image in 'extension' format inside the buffer
QString iconBase64 = QString::fromLatin1(byteArray.toBase64().data());
// save our image to file.val // save our image to file.val
doc->SetImage(iconBase64); doc->SetImage(iconBase64, extension);
}
} }
} }
@ -680,7 +695,7 @@ void DialogPatternProperties::SaveImage()
byteArray.append(doc->GetImage().toUtf8()); byteArray.append(doc->GetImage().toUtf8());
QByteArray ba = QByteArray::fromBase64(byteArray); QByteArray ba = QByteArray::fromBase64(byteArray);
QString extension = ".PNG"; QString extension = "." + doc->GetImageExtension();
QString filename = QFileDialog::getSaveFileName(this, tr("Save File")); QString filename = QFileDialog::getSaveFileName(this, tr("Save File"));
QFile file(filename + extension); QFile file(filename + extension);
if (file.open(QIODevice::WriteOnly)) if (file.open(QIODevice::WriteOnly))

View File

@ -5,7 +5,15 @@
<xs:complexType> <xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="unbounded"> <xs:sequence minOccurs="1" maxOccurs="unbounded">
<xs:element name="version" type="formatVersion"></xs:element> <xs:element name="version" type="formatVersion"></xs:element>
<xs:element name="image" type="xs:string" minOccurs="0" maxOccurs="1"></xs:element> <xs:element name="image" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="extension" type="xs:string"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="unit" type="units"></xs:element> <xs:element name="unit" type="units"></xs:element>
<xs:element name="author" type="xs:string" minOccurs="0" maxOccurs="1"></xs:element> <xs:element name="author" type="xs:string" minOccurs="0" maxOccurs="1"></xs:element>
<xs:element name="description" type="xs:string" minOccurs="0" maxOccurs="1"></xs:element> <xs:element name="description" type="xs:string" minOccurs="0" maxOccurs="1"></xs:element>

View File

@ -924,10 +924,48 @@ QString VAbstractPattern::GetImage() const
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void VAbstractPattern::SetImage(const QString &text) QString VAbstractPattern::GetImageExtension() const
{
const QString defExt = "PNG";
const QDomNodeList nodeList = this->elementsByTagName(TagImage);
if (nodeList.isEmpty())
{
return defExt;
}
else
{
const QDomNode domNode = nodeList.at(0);
if (domNode.isNull() == false && domNode.isElement())
{
const QDomElement domElement = domNode.toElement();
if (domElement.isNull() == false)
{
const QString ext = domElement.attribute(QString("extension"), "");
if (ext.isEmpty())
{
return defExt;
}
else
{
return ext;
}
}
}
}
return defExt;
}
//---------------------------------------------------------------------------------------------------------------------
void VAbstractPattern::SetImage(const QString &text, const QString &extension)
{ {
CheckTagExists(TagImage); CheckTagExists(TagImage);
setTagText(TagImage, text); setTagText(TagImage, text);
QDomNodeList list = elementsByTagName(TagImage);
for (int i=0; i < list.size(); ++i)
{
QDomElement dom = list.at(i).toElement();
dom.setAttribute(QString("extension"), extension);
}
modified = true; modified = true;
emit patternChanged(false); emit patternChanged(false);
} }

View File

@ -107,7 +107,8 @@ public:
void SetNotes(const QString &text); void SetNotes(const QString &text);
QString GetImage() const; QString GetImage() const;
void SetImage(const QString &text); QString GetImageExtension() const;
void SetImage(const QString &text, const QString &extension);
void DeleteImage(); void DeleteImage();
QString GetVersion() const; QString GetVersion() const;