Resolves: tdf#151468 honour tiff resolution fields

Change-Id: I57d996f49c6ae7e60991ff53eae867144b56d89d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141345
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
This commit is contained in:
Caolán McNamara
2022-10-13 21:14:28 +01:00
parent 937a96c7b8
commit aa451a4230

View File

@@ -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>
@@ -266,6 +267,25 @@ bool ImportTiffGraphicImport(SvStream& rTIFF, Graphic& rGraphic)
}
}
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));
AnimationFrame aAnimationFrame(aBitmapEx, Point(0, 0), aBitmapEx.GetSizePixel(),
ANIMATION_TIMEOUT_ON_CLICK, Disposal::Back);
aAnimation.Insert(aAnimationFrame);