vcl/source/filter/itiff/itiff.cxx |   20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

New commits:
commit 846711ad526fcc147bb39df26bf2c2ff25a053f3
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Thu Oct 13 21:14:28 2022 +0100
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Fri Oct 14 07:39:11 2022 +0200

    Resolves: tdf#151468 honour tiff resolution fields
    
    Change-Id: I57d996f49c6ae7e60991ff53eae867144b56d89d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141346
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/vcl/source/filter/itiff/itiff.cxx 
b/vcl/source/filter/itiff/itiff.cxx
index d8895b8cff31..db30ea2cac3c 100644
--- a/vcl/source/filter/itiff/itiff.cxx
+++ b/vcl/source/filter/itiff/itiff.cxx
@@ -25,6 +25,7 @@
 #include <vcl/BitmapTools.hxx>
 #include <vcl/animate/Animation.hxx>
 #include <bitmap/BitmapWriteAccess.hxx>
+#include <tools/fract.hxx>
 #include <tools/stream.hxx>
 #include <unotools/configmgr.hxx>
 
@@ -243,6 +244,25 @@ bool ImportTiffGraphicImport(SvStream& rTIFF, Graphic& 
rGraphic)
                     break;
             }
 
+            MapMode aMapMode;
+            uint16_t ResolutionUnit = RESUNIT_NONE;
+            if (TIFFGetField(tif, TIFFTAG_RESOLUTIONUNIT, &ResolutionUnit) == 
1 && ResolutionUnit != RESUNIT_NONE)
+            {
+                float xres = 0, yres = 0;
+
+                if (TIFFGetField(tif, TIFFTAG_XRESOLUTION, &xres) == 1 &&
+                    TIFFGetField(tif, TIFFTAG_YRESOLUTION, &yres) == 1 &&
+                    xres != 0 && yres != 0)
+                {
+                    if (ResolutionUnit == RESUNIT_INCH)
+                        aMapMode =  MapMode(MapUnit::MapInch, Point(0,0), 
Fraction(1/xres), Fraction(1/yres));
+                    else if (ResolutionUnit == RESUNIT_CENTIMETER)
+                        aMapMode =  MapMode(MapUnit::MapCM, Point(0,0), 
Fraction(1/xres), Fraction(1/yres));
+                }
+            }
+            aBitmapEx.SetPrefMapMode(aMapMode);
+            aBitmapEx.SetPrefSize(Size(w, h));
+
             AnimationBitmap aAnimationBitmap(aBitmapEx, Point(0, 0), 
aBitmapEx.GetSizePixel(),
                                              ANIMATION_TIMEOUT_ON_CLICK, 
Disposal::Back);
             aAnimation.Insert(aAnimationBitmap);

Reply via email to