Einzelnen Beitrag anzeigen

Benutzerbild von KingIR
KingIR

Registriert seit: 19. Feb 2006
81 Beiträge
 
Delphi 2006 Professional
 
#1

Abmessungen von Bilddateien per GDI+ ermitteln

  Alt 11. Mär 2006, 12:55
Dieser kleine Tipp beschreibt wie man mit Hilfe von GDI+ die Größe (Breite/Höhe) von beliebigen Bilddateien im PNG, BMP, GIF, JPEG, WMF u.a.-Format ermitteln kann. Die GDI+-DLL (gdiplus.dll) wird seit Windows XP von Microsoft mit ausgeliefert, kann aber auch für ältere Windows-Versionen heruntergeladen und mit der eigenen Anwendung verteilt werden.

Delphi-Quellcode:
type
  GDIPlusStartupInput = record
    GdiPlusVersion: integer;
    DebugEventCallback: integer;
    SuppressBackgroundThread: integer;
    SuppressExternalCodecs: integer;
  end;

var
  hGDIP: Cardinal;
  StartUpInfo: GDIPlusStartupInput;
  GdiplusStartup: function(var token: Integer; var lpInput: GDIPlusStartupInput; lpOutput: Integer): Integer; stdcall;
  GdiplusShutdown: function(var token: Integer): Integer; stdcall;
  GdipLoadImageFromFile: function(FileName: PWideString; var image: Integer): Integer; stdcall;
  GdipGetImageDimension: function(image: Integer; var Width, Height: Single): Integer; stdcall;
  GdipDisposeImage: function(image: Integer): Integer; stdcall;
  GdipToken: Integer;
  hImg: Integer;
  ImgWidth, ImgHeight: Single;
  UnicodeFileName: WideString;
Delphi-Quellcode:
hGDIP := LoadLibrary('gdiplus.dll');
if hGDIP <> 0 then
begin
  GdiplusStartup := GetProcAddress(hGDIP, 'GdiplusStartup');
  if Assigned(GdiplusStartup) then
  begin
    FillChar(StartUpInfo, SizeOf(StartUpInfo), 0);
    StartUpInfo.GdiPlusVersion := 1;
    if GdiplusStartup(GdipToken, StartUpInfo, 0) = 0 then
    begin
      GdiplusShutdown := GetProcAddress(hGDIP, 'GdiplusShutdown');
      GdipLoadImageFromFile := GetProcAddress(hGDIP, 'GdipLoadImageFromFile');
      GdipGetImageDimension := GetProcAddress(hGDIP, 'GdipGetImageDimension');
      GdipDisposeImage := GetProcAddress(hGDIP, 'GdipDisposeImage');

      UnicodeFileName := 'YOUR IMAGE FILE HERE';

      if GdipLoadImageFromFile(PWideString(UnicodeFileName), hImg) = 0 then
      begin
        GdipGetImageDimension(hImg, ImgWidth, ImgHeight);
        // Do something with the results here!
        MessageBox(FloatToStr(ImgWidth) + 'x' + FloatToStr(ImgHeight), 'Bildgröße');
        GdipDisposeImage(hImg);
      end;
      GdiplusShutdown(GdipToken);
    end;
  end;
  FreeLibrary(hGDIP);
end;
[edit=Chakotay1308]Delphi-Style und -Tags korrigiert. Mfg, Chakotay1308[/edit]
  Mit Zitat antworten Zitat