Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   bmp speichern (https://www.delphipraxis.net/42582-bmp-speichern.html)

Christian Seehase 21. Mär 2005 20:37

Re: bmp speichern
 
Moin Jens,

ich habe das gerade mal mit Lazarus getestet: Bild wurde korrekt gespeichert.
Wie kommt denn das, was Du speichern willst in das Image rein?

Ausserdem habe ich den kompletten Pfad, also inclusive Laufwerk und Verzeichnis, mit angegeben.

Nisbo 22. Mär 2005 05:59

Re: bmp speichern
 
@ Luckie

wo mache ich was ?
ich habe nur diesen Code:
Delphi-Quellcode:
// Speichern
procedure TForm7.speichern(Sender: TObject);
begin
     try
        Image1.Picture.SaveToFile('TestBitmap.bmp');
     finally
        ShowMessage('Bild wurde gespeichert.');
     end;
end;
das Bild it selber ein Screenshot welcher in Image1 geladen wird (Screenshot wird mit dem Programm gemacht, also nicht aus einer datei geladen) hier der erste Code dazu:

Delphi-Quellcode:
// Screenshot
procedure TForm7.Button3Click(Sender: TObject);
var tempBild: TBitmap;
begin
   WindowState   := wsminimized;
   Image1.picture := nil;
   tempBild      := TBitmap.Create;
   Sleep(1000);
   ScreenShot(tempBild,Edit2.Text,Edit1.Text,Edit3.Text,Edit4.Text);
   Image1.Picture.Assign(tempBild);
   tempBild.Free;
   WindowState   := wsNormal;
   Form7.BringToFront;
   SetForegroundWindow(FindWindow(nil,'Screenshot'));
end;
die Procedur ScreenShot schau dann so aus:

Delphi-Quellcode:
procedure ScreenShot(var Bild: TBitMap; startX2 : string; startY2 : string; endeX2 : string; endeY2 : string);
var
  Mydc   : cardinal;
  MausPos : TPoint;
  startX, startY, endeX, endeY : integer;
  startX1, startY1, endeX1, endeY1 : integer;
begin

     startX := strtoint(startX2);
     endeX := strtoint(endeX2);
     startY := strtoint(startY2);
     endeY := strtoint(endeY2);

     startX1 := startX;
     endeX1  := endeX;
     startY1 := startY;
     endeY1  := endeY;

     if startX > endeX then
        begin
          startX := endeX1;
          endeX := startX1;
        end;

     if startY > endeY then
        begin
          startY := endeY1;
          endeY := startY1;
        end;


     MyDc := GetDC(0);
     GetCursorPos(MausPos);
     Bild.PixelFormat := pf32bit;

      begin
         Bild.Width := endeX - startX;
         Bild.Height := endeY - startY;

         if Bild.Width < 0 then Bild.Width := Bild.Width * -1;
         if Bild.Height < 0 then Bild.Height := Bild.Height * -1;

         BitBlt(Bild.Canvas.Handle,0,0,endeX,(Screen.Height - startY),Mydc,startX,startY,SRCCOPY);
         
      end;
      ReleaseDC(0, Mydc);
end;
also damit lade ich den Screenshot in Image1
liegt da vielleicht irgendwo das Problem ?

@ Christian Seehase

an dem Patrh sollte es nicht liegen, das Bild wird ja angelegt, ist halt nur schwarz
welche Version von Lazarus verwendest du denn ? ich habe den SnapShot vom 21.03.2005 genommen also immer das aktuellste was es gibt

Christian Seehase 22. Mär 2005 18:42

Re: bmp speichern
 
Moin Jens,

ich habe hier die 0.94 beta vom 03.01.2005.

Mit der kann ich Dein Beispiel noch nicht einmal nachvollziehen, da diese Version schon TBitmap.Create nicht kennt. :?

3_of_8 22. Mär 2005 20:17

Re: bmp speichern
 
Frage: Kann es irgendwie sein, dass das Bild zum Zeitpunkt des Abspeicherns noch immer nil ist?

Alexander 22. Mär 2005 20:34

Re: bmp speichern
 
Mit der Meldung würde ich das auch eher so schreiben:
Delphi-Quellcode:
procedure TForm7.speichern(Sender: TObject);
begin
  try
    Image1.Picture.Bitmap.SaveToFile('TestBitmap.bmp');
    ShowMessage('Bild wurde gespeichert.');
  except
    ShowMessage('Bild konnte nicht gespeichert werden.');
  end;
end;
Sonst zeigt er doch die Meldung auch an, wenn das Bild nicht ordnungsgemäß gespeichert wurde...

Christian Seehase 22. Mär 2005 20:45

Re: bmp speichern
 
Moin Jens,

versuch' doch mal die Bitmap direkt, also ohne Umweg über Image zu speichern.
TBitmap kennt schliesslich auch eine Methode SaveToFile.

Nisbo 23. Mär 2005 07:43

Re: bmp speichern
 
Liste der Anhänge anzeigen (Anzahl: 1)
@ Alexander

habe jetzt mal deinen Code drinn, Bild wird gespeichert

@ Christian Seehase

was soll ich machen ?

@ all

habe jetzt mal nur einen screenshot von einem windowsordner gemacht, sprich von dem gelben icon, also sehr klein, das ergebnis ist ein bild in dieser größe, allerdings ist das jetzt nicht mehr komplett schwarz sondern sehr dunkel mit einigen farblichen stellen, ich hänge das bild hier mal an

Alexander 23. Mär 2005 07:56

Re: bmp speichern
 
Sieht denn der Screenshot im Image richtig aus? Also ohne zu speichern?
Hast du schon mal einfach:
Delphi-Quellcode:
Image1.Picture.SaveToFile();
probiert? Auch wenn wahrscheinlich einfach nur die Methode im bitmap aufgerufen wird.

Nisbo 23. Mär 2005 08:40

Re: bmp speichern
 
Hier habe ich schon mal nen ScreenShot gepostet, das funktioniert alles, nur das speichern nicht:
http://www.delphipraxis.net/download.php?id=10628

Delphi-Quellcode:
Image1.Picture.SaveToFile();
oder besser:

Delphi-Quellcode:
Image1.Picture.SaveToFile('TestBitmap.bmp');
habe ich auch schon versucht, das interessante war ja der kleine screenshot denn der war nicht mehr komplett schwarz (einfach mal ansehen)

Alexander 23. Mär 2005 09:31

Re: bmp speichern
 
Habe ich schon geschrieben und dass du den String noch einfügen musst, ist ja klar.
Ich weiß momentan leider nicht weiter, eigentlich sollte es funktionieren.
Du könntest aber mal dein Programm-Source hochladen, evtl. können wir so besser helfen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:05 Uhr.
Seite 2 von 3     12 3      

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