fix bug with image decoding

This commit is contained in:
GenevensiS
2026-05-03 05:03:08 +02:00
parent 05d205cafa
commit 9a5be16e4e
4 changed files with 61 additions and 55 deletions
+27 -21
View File
@@ -242,39 +242,45 @@ bool CardListBase::doBulkModification() {
return false;
}
void CardListBase::parseImageMetadata(CardP& card, const Image& image)
{
void CardListBase::parseImageMetadata(CardP& card, const Image& image) {
for (IndexMap<FieldP, ValueP>::iterator it = card->data.begin(); it != card->data.end(); it++) {
ImageValue* value = dynamic_cast<ImageValue*>(it->get());
if (value && !value->filename.empty()) {
RealRect rect(0.0, 0.0, 0.0, 0.0);
int degrees = 0;
decodeRectFromString(value->filename.toStringForKey(), rect, degrees);
rect = rect.intersect(RealRect(0.0, 0.0, image.GetWidth(), image.GetHeight()));
if (rect.width > 0.0 && rect.height > 0.0) {
Image img = image.GetSubImage(rect);
img = rotate_image(img, deg_to_rad(360 - degrees));
LocalFileName filename = set->newFileName("cropped_image", _(".png")); // a new unique name in the package
img.SaveFile(set->nameOut(filename), wxBITMAP_TYPE_PNG);
value->filename = filename;
}
else {
value->filename = LocalFileName();
if (decodeRectFromString(value->filename.toStringForKey(), rect, degrees)) {
rect = rect.intersect(RealRect(0.0, 0.0, image.GetWidth(), image.GetHeight()));
if (rect.width > 0.0 && rect.height > 0.0) {
Image img = image.GetSubImage(rect);
img = rotate_image(img, deg_to_rad(360 - degrees));
LocalFileName filename = set->newFileName(_("cropped_image"), _(".png")); // a new unique name in the package
img.SaveFile(set->nameOut(filename), wxBITMAP_TYPE_PNG);
value->filename = filename;
}
else {
value->filename = LocalFileName();
//queue_message(MESSAGE_WARNING, _("failed to recover image crop for card '") + card->identification() + _("'"));
}
}
}
}
}
void CardListBase::parseImageMetadata(CardP& card)
{
void CardListBase::parseImageMetadata(CardP& card) {
for (IndexMap<FieldP, ValueP>::iterator it = card->data.begin(); it != card->data.end(); it++) {
ImageValue* value = dynamic_cast<ImageValue*>(it->get());
if (value) {
Image img = decodeImageFromString(value->filename.toStringForKey());
if (img.IsOk()) {
LocalFileName filename = set->newFileName(_("decoded_image"), _(".png")); // a new unique name in the package
img.SaveFile(set->nameOut(filename), wxBITMAP_TYPE_PNG);
value->filename = filename;
if (value && !value->filename.empty()) {
Image img;
if (decodeImageFromString(value->filename.toStringForKey(), img)) {
if (img.IsOk()) {
LocalFileName filename = set->newFileName(_("decoded_image"), _(".png")); // a new unique name in the package
img.SaveFile(set->nameOut(filename), wxBITMAP_TYPE_PNG);
value->filename = filename;
}
else {
value->filename = LocalFileName();
//queue_message(MESSAGE_WARNING, _("failed to recover image encode for card '") + card->identification() + _("'"));
}
}
}
}