![]() |
Bmp verkleinern
Hallo mal wieder,
ich schieße mit meinem Programm einen Ausschnitt (Werte kommen aus .txt - File) des Bildschirms und speichere ihn als bmp. Jetzt ist aber das Bild zu groß und ich will es nach dem Screenshot meinetwegen um 50% (soll auch im .txt - File stehen) kleiner machen und dann als ScreenShot.bmp speichern. Ich hab schon etliches Ausprobiert, aber irgendwie bin ich halt noch nicht so weit mit Delphi...
Delphi-Quellcode:
var
DCDesk: HDC; bmp: TBitmap; datei: TextFile; j: integer; dateien: array[0..9] of Integer; begin j:=0; assignfile(datei,'koordinaten.txt'); reset(datei); while not eof(datei) do begin Readln(datei, dateien[j]); j:=j+1; end; // width = dateien[0] // height = dateien[1] // von Oben = dateien[2] // von Links = dateien[3] // width Klein = dateien[4] oder % - Angabe // height Klein = dateien[5] closefile(datei); bmp := TBitmap.Create; bmp.Width := dateien[0]; bmp.Height := dateien[1]; DCDesk := GetWindowDC(GetDesktopWindow); BitBlt(bmp.Canvas.Handle, 0, 0, dateien[0], dateien[1], DCDesk, dateien[2], dateien[3], SRCCOPY); bmp.SaveToFile('ScreenShot.bmp'); ReleaseDC(GetDesktopWindow, DCDesk); bmp.Free; end. |
Re: Bmp verkleinern
Hallo,
hier ein Beispiel für die Umsetzung mit der Prozentangabe. Dazu habe ich in dem beispiel ein 2. Bitmap eingeführt. Die Resourcenschutzblöcke (try-finally) solltest du bei dir ebenfalls ergänzen, wie in folgendem Code zu sehen ist.
Delphi-Quellcode:
Grüße
var
// ... bmp, bmp_small: TBitmap; // ... begin // ... bmp := TBitmap.Create; try bmp.Width := dateien[0]; bmp.Height := dateien[1]; DCDesk := GetWindowDC(GetDesktopWindow); BitBlt(bmp.Canvas.Handle, 0, 0, dateien[0], dateien[1], DCDesk, dateien[2], dateien[3], SRCCOPY); bmp.SaveToFile('ScreenShot.bmp'); // ab hier ist es neu bmp_small := TBitMap.Create; try bmp_small.Height := round(dateien[4] * dateien[1] / 100); bmp_small.Width := round(dateien[4] * dateien[0] / 100); bmp_small.Canvas.StretchDraw(Rect(0, 0, bmp_small.Width, bmp_small.Height), bmp); bmp_small.SaveToFile('ScreenShot_small.bmp'); finally FreeAndNil(bmp_small); end; ReleaseDC(GetDesktopWindow, DCDesk); finally FreeAndNil(bmp); end; end; |
Re: Bmp verkleinern
Danke, funktioniert super. Hab selbst noch n bischen rumgespielt und folgendes haut auch hin:
Delphi-Quellcode:
Hier muss man halt beachten die Größenangaben des Textfiles proportional zu berechnen, sonst verzerrt das Ganze.
bmp := TBitmap.Create;
bmp.Width := dateien[0]; bmp.Height := dateien[1]; bmp1 := TBitmap.Create; bmp1.Width := dateien[4]; bmp1.Height := dateien[5]; DCDesk := GetWindowDC(GetDesktopWindow); BitBlt(bmp.Canvas.Handle, 0, 0, dateien[0], dateien[1], DCDesk, dateien[2], dateien[3], SRCCOPY); bmp1.Canvas.StretchDraw(Rect(0,0,dateien[4], dateien[5]), bmp); bmp1.SaveToFile('ScreenShot.bmp'); ReleaseDC(GetDesktopWindow, DCDesk); bmp.Free; bmp1.Free; :coder2: |
Re: Bmp verkleinern
Denke dennoch an folgendes:
Zitat:
|
Re: Bmp verkleinern
Jawohl, werd ich in Zukunft beachten.
Danke für deine schnelle Hilfe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz