Co mam wstawić pod //repeat? Zmianę rozmiaru obrazka?
Ładowanie obrazka z pliku, bo w tej pętli w polu srBitmap.Name
masz nazwę znalezionego pliku; W tej pętli także wykonujesz zmianę rozmiaru załadowanej bitmapy i zapis do tego samego pliku; Pętla Repeat będzie się wykonywać dopóty, dopóki znaleziono kolejny plik;
Zobacz na poniższy przykład:
uses
SysUtils, Graphics, FileCtrl;
const
SEARCH_MASK = '*.bmp';
BITMAPS_WIDTH = 200;
BITMAPS_HEIGHT = 200;
var
srBitmap: TSearchRec;
bmpInput: TBitmap;
strDirectory: String;
begin
if SelectDirectory('Select directory with bitmaps:', '', strDirectory) then
begin
strDirectory := IncludeTrailingPathDelimiter(strDirectory);
bmpInput := TBitmap.Create();
try
if FindFirst(strDirectory + SEARCH_MASK, faAnyFile, srBitmap) = 0 then
try
repeat
bmpInput.LoadFromFile(strDirectory + srBitmap.Name);
bmpInput.Width := BITMAPS_WIDTH;
bmpInput.Height := BITMAPS_HEIGHT;
bmpInput.SaveToFile(strDirectory + srBitmap.Name);
until FindNext(srBitmap) <> 0;
WriteLn('Bitmaps successfully processed');
finally
FindClose(srBitmap);
end
else
WriteLn('No bitmaps found...');
finally
bmpInput.Free();
end;
end
else
WriteLn('Operation canceled...');
ReadLn;
end.
Najpierw za pomocą SelectDirectory pobierany jest katalog; Jeżeli użytkownik jakiś wybierze to za pomocą funkcji IncludeTrailingPathDelimiter dodawany jest brakujący znak \
na koniec ścieżki (jeśli jest wymagany); Następnie tworzony jest obiekt bitmapy - on posłuży nam do ładowania i obróbki obrazu; Wystarczy go raz stworzyć a nie za każdym razem w pętli, dlatego że metoda LoadFromFile
kasuje poprzednią zawartość obiektu i ładuje z pliku nową; Kolejnym krokiem jest załadowanie obrazu z pliku, zmiana jego rozmiaru i zapisanie z powrotem na dysku, używając zmiennej ze ścieżką bazową i pola srBitmap.Name
z samą nazwą znalezionego pliku; Na koniec wyszukiwanie zostaje zakończone za pomocą procedury FindClose i wyświetlony zostaje komunikat;
W swojej wersji Delphi nie mam czegoś takiego jak SelectDirectoryDialog
, więc posłużyłem się funkcją SelectDirectory
; Tak samo u mnie klasa TBitmap
nie posiada metody SetSize
, więc ustawiłem ręcznie Width
i Height
; Dlatego też użyj swojego dialogu i swojej metody do zmiany rozmiaru bitmap.