vcl/source/filter/etiff/etiff.cxx | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-)
New commits: commit 988285410f8883ad49f32c4b804c4f5bd14569d0 Author: Julien Nabet <serval2...@yahoo.fr> AuthorDate: Fri Jun 10 22:22:38 2022 +0200 Commit: Julien Nabet <serval2...@yahoo.fr> CommitDate: Sat Jun 11 21:35:14 2022 +0200 tdf#98743: TIFF export uses 96dpi by default Create a brand new odg with A4 format with just a rectangle or a smiley on it and export it in tiff. Since we export the whole page, the size is: - in cm: 21x29.7 (definition of A4) - in inches: about 8.2677x11.6929 Taking a look at the value of the generated tiff, we got: ImageWidth: 794 ImageLength: 1123 Notice that 794/8.2677 like 1123/11.6929 is about 96. So resolution isn't 300x300 (like the code suggests) but 96x96. Then let's remove all the useless mechanism to try to find the X and Y resolutions. TIFF Documentation indicates that "XResolution" and "YResolution" tags use "RATIONAL" type which is defined as: "Two LONGs: the first represents the numerator of a fraction; the second, the denominator." Since we got a non floating value, we can use "1" for denominator and "96" for nominator. With this we change TIFFWriter::ImplWriteResolution implementation to put the nominator first which corresponds to the resolution passed by argument to the method and the denominator afterwards. Finally, let's fix the name of the second of ImplWriteResolution, it's the resolution value, not the resolution unit. Next step would be to use the dialog box for compressing options (like for png or jpg). But for this I think we should take benefit of external lib "libtiff" since we now use it now for import. Change-Id: I7dbd04e506e98c344f97e455955cdf2c2f6d83c2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135631 Tested-by: Jenkins Reviewed-by: Julien Nabet <serval2...@yahoo.fr> diff --git a/vcl/source/filter/etiff/etiff.cxx b/vcl/source/filter/etiff/etiff.cxx index b34accab889b..2bfaea923c23 100644 --- a/vcl/source/filter/etiff/etiff.cxx +++ b/vcl/source/filter/etiff/etiff.cxx @@ -191,15 +191,8 @@ bool TIFFWriter::WriteTIFF( const Graphic& rGraphic, FilterConfigItem const * pF if ( ImplWriteHeader( aAnimation.Count() > 0 ) ) { - Size aDestMapSize( 300, 300 ); - const MapMode& aMapMode( aBmp.GetPrefMapMode() ); - if ( aMapMode.GetMapUnit() != MapUnit::MapPixel ) - { - const Size aPrefSize( rGraphic.GetPrefSize() ); - aDestMapSize = OutputDevice::LogicToLogic(aPrefSize, aMapMode, MapMode(MapUnit::MapInch)); - } - ImplWriteResolution( mnXResPos, aDestMapSize.Width() ); - ImplWriteResolution( mnYResPos, aDestMapSize.Height() ); + ImplWriteResolution( mnXResPos, 96 ); + ImplWriteResolution( mnYResPos, 96 ); if ( mnPalPos ) ImplWritePalette(); ImplWriteBody(); @@ -447,14 +440,14 @@ void TIFFWriter::ImplWriteBody() } -void TIFFWriter::ImplWriteResolution( sal_uInt64 nStreamPos, sal_uInt32 nResolutionUnit ) +void TIFFWriter::ImplWriteResolution( sal_uInt64 nStreamPos, sal_uInt32 nResolutionValue ) { sal_uInt64 nCurrentPos = m_rOStm.Tell(); m_rOStm.Seek( nStreamPos + 8 ); m_rOStm.WriteUInt32( nCurrentPos - mnStreamOfs ); m_rOStm.Seek( nCurrentPos ); + m_rOStm.WriteUInt32( nResolutionValue ); m_rOStm.WriteUInt32( 1 ); - m_rOStm.WriteUInt32( nResolutionUnit ); }