W jaki sposób pobrać wymiary obrazka
Coldpeer
Jak to zrealizować? Można otworzyć obrazek za pomocą klasy TImage i odczytać wymiary obrazka. Poniżej prezentuję taką funkcję:
function GetImageSize(const Path : string) : string;
var Image : TImage;
begin
if ExtractFileExt(Path) <> '' then
try
Image := TImage.Create(nil);
Image.Picture.LoadFromFile(Path);
Result := IntToStr(Image.Picture.Width) + 'x' + IntToStr(Image.Picture.Height);
finally
Image.Free;
end;
end;
Powyższa funkcja zwraca wartość w postaci SzerokośćxWysokość. Przedstawiam funkcję, która zwraca tylko wybrane przez nas dane:
function GetImageSize(const Path : string; Height : boolean = False) : integer;
var Image : TImage;
begin
if ExtractFileExt(Path) <> '' then
try
Image := TImage.Create(nil);
Image.Picture.LoadFromFile(Path);
if not Height then
Result := Image.Picture.Width
else
Result := Image.Picture.Height;
finally
Image.Free;
end;
end;
Wywołanie wygląda następująco (dla pliku C:\img.jpg):
szerokosc := GetImageSize('C:\img.jpg');
wysokosc := GetImageSize('C:\img.jpg', True);
Standardowo klasa TImage obsługuje takie formaty jak JPG/JPEG czy BMP. Aby obsłużyć formaty GIF czy PNG, należy zainteresować się dodatkowymi modułami jak TGifImage, czy TPngImage - dostępnymi za darmo w internecie).
Co do drugiej wersji, lepiej imo zwracać TPoint. Masz szerokość i wysokość przy jednym wywołaniu funkcji.
Nie, nie prościej.
Jak będziesz miał listę 100 obrazków, to będziesz w pętli wszystkie ładował i też utrudniał sobie życie? Gdy masz np. dużą listę obrazków, których musisz sprawdzić wymiary i sprawdzasz to wiele razy, w różnych miejscach programu, wtedy taka funkcja się przydaje. I nie musisz wrzucać na formę specjalnie komponentu - Delphi to nie tylko komponenty i klikanie.
PS. co do Twojego kodu, to jak już to Label1.Caption := IntToStr(Image.Picture.Height);
A czy nie prościej jest zrobić taki myk:
W OnCreate czy gdzieś tam:
Ale trzeba wrzucić Imaga na forme...