AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bmp verkleinern

Ein Thema von BigBen · begonnen am 31. Jan 2008 · letzter Beitrag vom 31. Jan 2008
Antwort Antwort
BigBen

Registriert seit: 12. Dez 2007
Ort: Nassenfels
11 Beiträge
 
#1

Bmp verkleinern

  Alt 31. Jan 2008, 08:16
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.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Bmp verkleinern

  Alt 31. Jan 2008, 08:44
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:
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;
Grüße
  Mit Zitat antworten Zitat
BigBen

Registriert seit: 12. Dez 2007
Ort: Nassenfels
11 Beiträge
 
#3

Re: Bmp verkleinern

  Alt 31. Jan 2008, 08:58
Danke, funktioniert super. Hab selbst noch n bischen rumgespielt und folgendes haut auch hin:

Delphi-Quellcode:
  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;
Hier muss man halt beachten die Größenangaben des Textfiles proportional zu berechnen, sonst verzerrt das Ganze.

  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Bmp verkleinern

  Alt 31. Jan 2008, 09:01
Denke dennoch an folgendes:

Zitat von Matze:
Die Resourcenschutzblöcke (try-finally) solltest du bei dir ebenfalls ergänzen [...]
Falls im try-Block ein Fehler auftreten sollte, wird dann der Speicher im Normalfall trotzdem freigegeben, was bei deinem Code nicht der Fall wäre.
  Mit Zitat antworten Zitat
BigBen

Registriert seit: 12. Dez 2007
Ort: Nassenfels
11 Beiträge
 
#5

Re: Bmp verkleinern

  Alt 31. Jan 2008, 09:03
Jawohl, werd ich in Zukunft beachten.
Danke für deine schnelle Hilfe.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz