Bitmap speichert Veränderung nicht

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
Jim92
Beiträge: 24
Registriert: Sa 29. Jan 2011, 13:09

Bitmap speichert Veränderung nicht

Beitrag von Jim92 »

Hallihallo

Ich hab heute so im Zuge der Langeweile an einem Programm rumgebastelt, das einen Screenshot aufnehmen soll, diesen dann verfremdet in dem es zufällige Symbole hinein zeichnet und selbigen dann in einem Ordner speichert. Soweit so gut. Anschließend soll der veränderte Screenshot in einem TImage angezeigt werden und genau hier beginnen die Probleme. Wenn ich nämlich das Bild lade, erscheint zwar der Screenshot, aber die Stellen, welche verändert worden sein sollten werden einfach nicht angezeigt. Das irritiert mich jetzt ein wenig und deshalb wollte ich Fragen: Was mache ich falsch?

Hier mein Code:

Code: Alles auswählen

procedure MyForm.MyButtonClick(Sender: TObject);
var
  MyBitmap: TBitmap;
  ScreenDC: HDC;
  mX: HWND;
begin
  Dir:=Paramstr(0);
  Dir:=ExtractfilePath(Dir);
  Dir:=Dir+'Screens';
  Dir:=includetrailingpathdelimiter(Dir);             //bis hier wird der Pfad zum speichern des Bildes ermittelt
  MyBitmap := TBitmap.Create;
  ScreenDC := GetDC(0);
  MyBitmap.LoadFromDevice(ScreenDC);           //Das hier hab ich vom Lazarus Wiki, glaube ich
  ReleaseDC(mX,ScreenDC);
  With MyBitmap.Canvas do   
    begin
      Pen.Color:=clLime;                 //soll hier halt ein einfaches grünes Rechteck auf das Bild zeichnen
      Brush.Color:=clLime;
      FillRect(10,10,1000,1000);                               
    end;
  MyBitmap.SaveToFile(Dir+'Screen.bmp');
  MyBitmap.Free;
  Image1.Picture.LoadFromFile(Dir+'Screen.bmp');
end;


Ich bedanke mich jetzt schonmal für eure Mühen.
Grußels
Jimmy

P.S. Die Suchfunktion des Forums wies mich immer nur an, andere Suchbegriffe zu wählen, da die von mir gewählten zu häufig vorkommen würden, irgendwann sind mir dann die Ideen ausgegangen.

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: Bitmap speichert Veränderung nicht

Beitrag von theo »

Bei mir funzt das einwandfrei.
Lazarus 0.9.31 r35366M FPC 2.6.0 x86_64-linux-gtk 2

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: Bitmap speichert Veränderung nicht

Beitrag von DiBo33 »

Same here
Laz: 0.9.31#35004 FPC2.6.0 i386-linux-gtk2

Edit:
P.S. Die Suchfunktion des Forums wies mich immer nur an, andere Suchbegriffe zu wählen, da die von mir gewählten zu häufig vorkommen würden, irgendwann sind mir dann die Ideen ausgegangen.


Tipp: suche in Google mit der Angabe

Code: Alles auswählen

site:lazarusforum.de

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Bitmap speichert Veränderung nicht

Beitrag von MAC »

Windows 7 64 Bit Laz. 35297 FPC 2.5.1
Folgendermaßen abgeändert:
Bei mir wird das Bild direkt übergeben und nicht zwischengespeichert, wieso auch :D

Weder FillRect noch Rectanle als auch Line bewirken das die Linien Farbig sind. Die Farbe ist die des Standart "Windows form hintergrund" also kein weis sondern ein leichtes grau...
Wieso es gerade bei dir nicht funktioniert weis ich nicht...

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  MyBitmap: TBitmap;
  ScreenDC: HDC;
  mX: HWND;
begin
  MyBitmap := TBitmap.Create;
  ScreenDC := GetDC(0);
  MyBitmap.LoadFromDevice(ScreenDC);           //Das hier hab ich vom Lazarus Wiki, glaube ich
  ReleaseDC(mX,ScreenDC);
      MyBitmap.Canvas.Pen.Color:=clLime;                 //soll hier halt ein einfaches grünes Rechteck auf das Bild zeichnen
      MyBitmap.Canvas.Brush.Color:=clLime;
      MyBitmap.Canvas.Brush.Style:= bsSolid;
      //MyBitmap.Canvas.Line(10,10,200,200);
      //myBitmap.Canvas.Rectangle(10,10,30,100);
      MyBitmap.Canvas.FillRect(10,10,1000,1000);
  Image1.Picture.Bitmap := MyBitmap;
  MyBitmap.Free;
end;

Code: Alles auswählen

Signatur := nil;

Antworten