Delphi-PRAXiS

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)

Nisbo 21. Mär 2005 10:11


bmp speichern
 
Ist dieser Code richtig ?

Delphi-Quellcode:
// Speichern
procedure TForm7.speichern(Sender: TObject);
begin
     Image1.Picture.Bitmap.SaveToFile('TestBitmap.bmp');
     ShowMessage('Bild wurde gespeichert.');
end;
denn ich bekomme beim speichern nur ein schwarzes Bild in den richtigen abmessungen
ansonsten wird es wieder mal an Lazarus liegen :(

denke mal eine andere Methode gibt es nicht das Bild zu speichern oder ?

Speedmaster 21. Mär 2005 10:14

Re: bmp speichern
 
Nur mal so schnell ein Kommentar:

Schreib das doch so:

Delphi-Quellcode:
procedure TForm7.speichern(Sender: TObject);
begin
  try
    Image1.Picture.Bitmap.SaveToFile('TestBitmap.bmp');
  finally
    ShowMessage('Bild wurde gespeichert.');
  end;
end;

Zacherl 21. Mär 2005 10:14

Re: bmp speichern
 
Versuch einfach mal:

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

Nisbo 21. Mär 2005 10:55

Re: bmp speichern
 
der code schaut jetzt so aus:

Delphi-Quellcode:
// Speichern
procedure TForm7.speichern(Sender: TObject);
begin
     try
        Image1.Picture.SaveToFile('TestBitmap.bmp');
     finally
        ShowMessage('Bild wurde gespeichert.');
     end;
end;
das gespeicherte bild ist aber immer noch komplett schwarz :(

Binärbaum 21. Mär 2005 14:55

Re: bmp speichern
 
Zitat:

Zitat von Florian Bernd
Versuch einfach mal:

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

Was soll das denn? Also wenn man ein Bitmap speichern will, dann muss man auch angeben, in welche Datei es gespeichert werden soll. :roll:

MfG
Binärbaum

idontwantaname 21. Mär 2005 14:56

Re: bmp speichern
 
Zitat:

Zitat von Binärbaum
Zitat:

Zitat von Florian Bernd
Versuch einfach mal:

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

Was soll das denn? Also wenn man ein Bitmap speichern will, dann muss man auch angeben, in welche Datei es gespeichert werden soll. :roll:

MfG
Binärbaum

er hat wahrscheinlich erwartet, dass man sich denken kann, dass man den dateinamen an die funktion übergeben muss :wink:

Binärbaum 21. Mär 2005 15:01

Re: bmp speichern
 
Zitat:

Zitat von idontwantaname
er hat wahrscheinlich erwartet, dass man sich denken kann, dass man den dateinamen an die funktion übergeben muss :wink:

Da hätte man aber wenigstens drei Punkte hinschreiben können, um anzudeuten, dass da noch was hin muss.

Nisbo 21. Mär 2005 15:37

Re: bmp speichern
 
das war mir schon klar, hatte es ja auch eingefügt:

Image1.Picture.SaveToFile('TestBitmap.bmp');

siehe obrigen code

Speedmaster 21. Mär 2005 15:38

Re: bmp speichern
 
Zitat:

Zitat von Binärbaum
Zitat:

Zitat von idontwantaname
er hat wahrscheinlich erwartet, dass man sich denken kann, dass man den dateinamen an die funktion übergeben muss :wink:

Da hätte man aber wenigstens drei Punkte hinschreiben können, um anzudeuten, dass da noch was hin muss.

Komischerweisse hat der ersteller des Threads gewusst das etwas rein muss....Solche unnötigen kommentare brauch man eigentlich nicht!

Luckie 21. Mär 2005 18:10

Re: bmp speichern
 
Wo legst du die Farbtife usw. von dem Bitmap fest?

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...

Alexander 23. Mär 2005 09:42

Re: bmp speichern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hatte gerade mal kurz Zeit und habe es mit meinem Delphi mal nachgebaut (siehe Anhang). Bei mir funktioniert das wunderbar.
Kannst es ja mal bei dir kompilieren. Kannst ja auch mal versuchen, dass Bitmap direkt, nachdem der Screenshot geschossen wurde, zu speichern. Ohne Umweg über's Image. Dann weist du zumindest, ob es am TImage liegt.

Nisbo 23. Mär 2005 09:43

Re: bmp speichern
 
welchen string einfügen ?
den code den ich verwende habe ich auf seite 1 gepostet, also wie ich den screenshot mache und wie das bild gespeichert wird, der letztere ist ja jetzt auf deinen code angepasst

btw habe ich Lazarus (wegen dem Code)

Nisbo 23. Mär 2005 09:54

Re: bmp speichern
 
habe jetzt auch mal

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.SaveToFile('TestBitmap.bmp');
   tempBild.Free;
   WindowState   := wsNormal;
   Form7.BringToFront;
   SetForegroundWindow(FindWindow(nil,'Screenshot'));
end;
versucht, also das

tempBild.SaveToFile('TestBitmap.bmp');

eingefügt, wieder nen schwarzes bild
dein Programm funktioniert, muß also wohl doch an Lazarus liegen :(

EDIT:

du hast in uses noch das drinn:
, Messages, Variants

hatte das mal mit eingefügt und neu getestet, aber immer noch das selbe

Alexander 23. Mär 2005 10:12

Re: bmp speichern
 
Funktioniert mein Programm nur als kompilierte Version oder kannst du auch das selber kompilieren? Dann funktioniert es nicht?
Wenn ich die richtig verstanden habe, dann scheint das wirklich ein Bug von L. sein. Bleiben dir zwei Möglichkeiten:
Schaun, ob du irgendwo günstig Delphi herbekommst oder kucken ob es bereits Bug-Fixes gibt. Den Bug würde ich auf jedenfall melden.

Nisbo 23. Mär 2005 10:44

Re: bmp speichern
 
Ich kann das doch bei mir nicht öffnen das projekt, st doch von Delphi
gemeldet habe ich das schon, aber der Support dort ......
naja was sol man erwarten ist ja freeware

Delphi 5 Standard habe ich bereits am 20. März ersteigert
siehe topic hier:
http://www.delphipraxis.net/internal...ct.php?t=49787
na mal schauen wann es ankommt und ob dann alles funktioniert

Alexander 23. Mär 2005 10:57

Re: bmp speichern
 
Ach so, ich dachte man könnte das importieren. Naja, wenn du so wieso Delphi bald hast ;)

Nisbo 23. Mär 2005 11:09

Re: bmp speichern
 
ja bald, und hoffentlich :D
hoffe mal das ich mit D5 auch das ganze umsetzen kann, nicht das es zu alt ist :(

Alexander 23. Mär 2005 11:29

Re: bmp speichern
 
Zitat:

Zitat von Nisbo
ja bald, und hoffentlich :D
hoffe mal das ich mit D5 auch das ganze umsetzen kann, nicht das es zu alt ist :(

Keine Angst, das wird auf jeden Fall klappen :thumb:

Nisbo 31. Mär 2005 16:55

Re: bmp speichern
 
Thema hat sich erledigt, mit Delphi 5 funktioniert es jetzt :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:58 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