fpspreadsheet: Improved detection of pixel resolution for variants of bmp file format.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4567 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2016-03-17 11:30:10 +00:00
parent 8b9871c84d
commit 08e1a619ca

View File

@ -139,13 +139,20 @@ var
info: TBitmapInfoHeader; info: TBitmapInfoHeader;
begin begin
result := False; result := False;
dpiX := 0;
dpiY := 0;
if AStream.Read(header{%H-}, SizeOf(header)) <> SizeOf(header) then Exit; if AStream.Read(header{%H-}, SizeOf(header)) <> SizeOf(header) then Exit;
if LEToN(header.bfType) <> BMP_MAGIC_WORD then Exit; if LEToN(header.bfType) <> BMP_MAGIC_WORD then Exit;
if AStream.Read(info{%H-}, SizeOf(info)) <> SizeOf(info) then Exit; if AStream.Read(info{%H-}, SizeOf(info)) <> SizeOf(info) then Exit;
AWidth := LEToN(info.Width); AWidth := LEToN(info.Width);
AHeight := abs(LEToN(info.Height)); AHeight := abs(LEToN(info.Height)); // can be negative in case of "top-down" image
dpiX := LEToN(info.XPelsPerMeter) * 0.0254; if info.Size >= 40 then
dpiY := LEToN(info.YPelsPerMeter) * 0.0254; begin
dpiX := LEToN(info.XPelsPerMeter) * 0.0254;
dpiY := LEToN(info.YPelsPerMeter) * 0.0254;
end;
if dpiX = 0 then dpiX := 72;
if dpiY = 0 then dpiY := 72;
Result := true; Result := true;
end; end;
@ -904,7 +911,7 @@ initialization
{0} itPNG := RegisterImageType('image/png', 'png', @GetPNGSize); {0} itPNG := RegisterImageType('image/png', 'png', @GetPNGSize);
{1} itJPEG := RegisterImageType('image/jpeg', 'jpg|jpeg|jfif|jfe', @GetJPGSize); {1} itJPEG := RegisterImageType('image/jpeg', 'jpg|jpeg|jfif|jfe', @GetJPGSize);
{2} itTIFF := RegisterImageType('image/tiff', 'tif|tiff', @GetTIFSize); {2} itTIFF := RegisterImageType('image/tiff', 'tif|tiff', @GetTIFSize);
{3} itBMP := RegisterImageType('image/bmp', 'bmp', @GetBMPSize); {3} itBMP := RegisterImageType('image/bmp', 'bmp|dib', @GetBMPSize);
{4} itGIF := RegisterImageType('image/gif', 'gif', @GetGIFSize); {4} itGIF := RegisterImageType('image/gif', 'gif', @GetGIFSize);
{5} itSVG := RegisterImageType('image/svg+xml', 'svg', @GetSVGSize); {5} itSVG := RegisterImageType('image/svg+xml', 'svg', @GetSVGSize);
{6} itWMF := RegisterImageType('application/x-msmetafile', 'wmf', @GetWMFSize); {6} itWMF := RegisterImageType('application/x-msmetafile', 'wmf', @GetWMFSize);