Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Image in den Zwischenspeicher (https://www.delphipraxis.net/42321-image-den-zwischenspeicher.html)

Hospi 17. Mär 2005 08:48


Image in den Zwischenspeicher
 
Hallo alle miteinander!

Frage: Wie kann man ein Bild, welches bei Laufzeit erzeugt wurde, in den Zwischenspeicher ablegen?
Bis hier bin ich:
Delphi-Quellcode:
clipboard.assign(Image1.picture);
Wenn ich den Befehl jedoch ausführe kommt ein Access Violation Fehler.

Gruß
Hospi

Khabarakh 17. Mär 2005 13:32

Re: Image in den Zwischenspeicher
 
Mit Clipboard.Assign und TBitmap geht es jedenfalls :gruebel: . Probier vielleicht mal Assign(Image1);

toms 17. Mär 2005 13:37

Re: Image in den Zwischenspeicher
 
Probier's mal so:
Delphi-Quellcode:
Clipboard.Assign(Image1.Picture.Bitmap);

Hospi 17. Mär 2005 19:47

Re: Image in den Zwischenspeicher
 
Nee ... Beide Versionen funktionieren nicht! :wall: (Habe ich auch schon selber ausprobiert gehabt)
Frage: Macht es eigendlich was aus wenn das Bild durch Canvas gezeichnet wurde?

Wie funktioniert das mit dem Screenshot nochmal?? Der müsste doch eigendlich auch das Bild in die Zwischenablage legen können oder?

Gruß
Hospi

Khabarakh 17. Mär 2005 19:50

Re: Image in den Zwischenspeicher
 
Zitat:

Zitat von Hospi
Nee ... Beide Versionen funktionieren nicht! :wall: (Habe ich auch schon selber ausprobiert gehabt)
Frage: Macht es eigendlich was aus wenn das Bild durch Canvas gezeichnet wurde?

Wie funktioniert das mit dem Screenshot nochmal?? Der müsste doch eigendlich auch das Bild in die Zwischenablage legen können oder?

Gruß
Hospi

Das kommt natürlich auf deinen Code an. Aber wenn er halbswegs gut ist, wird sicher ein Bitmap verwendet, und damit klappt es bei mir wie gesagt.

Hospi 17. Mär 2005 20:05

Re: Image in den Zwischenspeicher
 
Zitat:

Das kommt natürlich auf deinen Code an. Aber wenn er halbswegs gut ist, wird sicher ein Bitmap verwendet, und damit klappt es bei mir wie gesagt.
Bitte prezisieren :oops: , wie meinst du "ein Bitmap verwendet", ich zeichne ein Digramm in ein Image, welches ich nun in die Zwischenablage packen möchte.

Khabarakh 17. Mär 2005 20:14

Re: Image in den Zwischenspeicher
 
Zitat:

Zitat von Hospi
Zitat:

Das kommt natürlich auf deinen Code an. Aber wenn er halbswegs gut ist, wird sicher ein Bitmap verwendet, und damit klappt es bei mir wie gesagt.
Bitte prezisieren :oops: , wie meinst du "ein Bitmap verwendet", ich zeichne ein Digramm in ein Image, welches ich nun in die Zwischenablage packen möchte.

Ich habe den Code für die Screenshots gemeint. Welchen verwendest du?

Hospi 17. Mär 2005 20:23

Re: Image in den Zwischenspeicher
 
Noch gar keinen, ich hab noch nicht mit Screenshots gearbeitet. (Habe ich gerade erst gefunden, dass es so etwas überhaupt gibt!) :pale:

Pr0g 17. Mär 2005 20:41

Re: Image in den Zwischenspeicher
 
Zeichnest du das Diagramm einfach nur auf das Canvas des Images, oder direkt auf das Bitmap im Image. Wenn erstes, dann mach auf jeden Falls letzteres.

Fürs reine Zeichnen ist die PaintBox da, das Canvas des Image sollte dafür nciht missbraucht werden ;)


MfG Pr0g

Hospi 18. Mär 2005 07:44

Re: Image in den Zwischenspeicher
 
Zitat:

Zeichnest du das Diagramm einfach nur auf das Canvas des Images, oder direkt auf das Bitmap im Image. Wenn erstes, dann mach auf jeden Falls letzteres.
Na Gut, ich versuch mal letzteres! Könnte die Fehlermeldung daher rühren?????

Hospi 18. Mär 2005 07:55

Re: Image in den Zwischenspeicher
 
Zitat:

direkt auf das Bitmap im Image
Wie ist das gemeint?

Catbytes 18. Mär 2005 08:16

Re: Image in den Zwischenspeicher
 
Hallo,

was spricht gegen diesen Code?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  MyFormat : Word;
  AData : THandle;
  APalette : HPalette;
begin
  Image1.Picture.SaveToClipBoardFormat(MyFormat,AData,APalette);
  ClipBoard.SetAsHandle(MyFormat,AData);
end;
ClipBrd in Uses nicht vergessen...

Pr0g 18. Mär 2005 11:43

Re: Image in den Zwischenspeicher
 
Zitat:

Zitat von Hospi
Wie ist das gemeint?

Du erzeugst ein Bitmap, zeichnest drauf und packst es dann in das Image, hier ein Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  fBmp: TBitmap; //wird zum Zeichnen genutzt
begin
  //Instanz anlegen
  fBmp := TBitmap.Create;
  try
    //Breite und Höhe der des Image anpassen
    fBmp.Width := Image1.Width;
    fBmp.Height := Image1.Height;
    //Pixelformat setzen
    fBmp.PixelFormat := pf32Bit;

    //hier kommen deine ganzen Zeichenfunktionen
    fBmp.Canvas.MoveTo(1, 1);
    fBmp.Canvas.LineTo(100, 100);
    //...

    //Bitmap ins Image kopieren
    Image1.Picture.Bitmap.Assign(fBmp);
  finally
    //Instanz wieder freigeben
    fBmp.Free;
  end;
end;
Nun kannst das Bitmap auch mit
Delphi-Quellcode:
Clipboard.Assign(Image1.Picture.Bitmap);
in die Zwischenablage kopieren.

Hospi 18. Mär 2005 13:02

Re: Image in den Zwischenspeicher
 
Zitat:

was spricht gegen diesen Code?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  MyFormat : Word;
  AData : THandle;
  APalette : HPalette;
begin
  Image1.Picture.SaveToClipBoardFormat(MyFormat,AData,APalette);
  ClipBoard.SetAsHandle(MyFormat,AData);
end;

Wie wird MyFormat, AData, APalette belegt?

Pr0g 18. Mär 2005 13:10

Re: Image in den Zwischenspeicher
 
Zitat:

Zitat von Hospi
Wie wird MyFormat, AData, APalette belegt?

Warum nimmst du nicht die Methode, die ich beschrieben hatte. Um das Bitmap im Image wirst du sowieso nicht herumkommen, denn vom direkten Zeichnen auf das ImageCanvas ohne Bitmap kann ich nur abraten.

Hospi 18. Mär 2005 20:55

Re: Image in den Zwischenspeicher
 
Zitat:

Du erzeugst ein Bitmap, zeichnest drauf und packst es dann in das Image, hier ein Beispiel:

Delphi-Quellcode:
 procedure TForm1.Button1Click(Sender: TObject);
var
  fBmp: TBitmap; //wird zum Zeichnen genutzt
begin
  //Instanz anlegen
  fBmp := TBitmap.Create;
  try
    //Breite und Höhe der des Image anpassen
    fBmp.Width := Image1.Width;
    fBmp.Height := Image1.Height;
    //Pixelformat setzen
    fBmp.PixelFormat := pf32Bit;

    //hier kommen deine ganzen Zeichenfunktionen
    fBmp.Canvas.MoveTo(1, 1);
    fBmp.Canvas.LineTo(100, 100);
    //...

    //Bitmap ins Image kopieren
    Image1.Picture.Bitmap.Assign(fBmp);
  finally
    //Instanz wieder freigeben
    fBmp.Free;
  end;
end;

Ähm ... joa.

Ich habe diese Procedure ausprobiert und es kommt immer noch der Access Violation Fehler.

Was muss denn noch zusätzlich eingefügt werden???? Die ClipBrd habe ich in Uses drin und Clipboard als vom Typ TClipboard deklariert (Als Globale Variable). Fehlt da noch was oder könnte es vieleicht an meiner Delphi-Version liegen (Version 6.00)?

Wenn ich den Quellcode von Catbytes ausprobiere:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  MyFormat : Word;
  AData : THandle;
  APalette : HPalette;
begin
  Image1.Picture.SaveToClipBoardFormat(MyFormat,AData,APalette);
  ClipBoard.SetAsHandle(MyFormat,AData);
end;
und ClipBoard.SetAsHandle(MyFormat,AData); weg lasse kommt kein Fehler (Das Bild wird natürlich auch nicht in den Zwischenspeicher geladen).
Folge: Entweder stimmt was nicht mit meinem Delphi nicht oder ich habe einfach etwas beim Einbinden/Deklaration vergessen.

Pr0g 18. Mär 2005 21:07

Re: Image in den Zwischenspeicher
 
Wo genau kommt der Fehler? Wenn das Bild im Image ist kannst du es doch einfach per
Delphi-Quellcode:
Clipboard.Assign(Image1.Picture.Bitmap);
in die Zwischenablage packen.

Catbytes 18. Mär 2005 21:47

Re: Image in den Zwischenspeicher
 
Zitat:

Zitat von Hospi
Clipboard als vom Typ TClipboard deklariert (Als Globale Variable).

Warum machst Du das? Clipboard ist schon von TClipboard abgeleitet.

Lade Dir mal das runter.

Das klappt bei mir einwandfrei...

Hospi 19. Mär 2005 13:12

Re: Image in den Zwischenspeicher
 
Super, vielen Dank, es funktioniert! :-D (Beide Varianten)
Mein Problem lag wahrscheinlich bei der Daklaration:
Delphi-Quellcode:
var
  Form1: TForm1;
  clipboard:Tclipboard;

implementation
                 
{$R *.dfm}
das wars also. ich gedachte, dass ich clipboard noch mal(so wie oben) daklarieren müsste. :dp:

Bis denn
Sven

Pr0g 19. Mär 2005 15:16

Re: Image in den Zwischenspeicher
 
Mal als Hinweis für spätere Codes. Deklarier die Variablen nicht gloabl, wie in deinem Beispiel, sondern in dem "private", bzw. "public" Abschnitt der Form.

Hospi 19. Mär 2005 18:37

Re: Image in den Zwischenspeicher
 
Danke für den Hinweis, aber wenn ich doch nur eine Form habe, ist das denn nicht egal ob es im "privat" oder global steht? :gruebel:

Pr0g 19. Mär 2005 18:45

Re: Image in den Zwischenspeicher
 
Du wirst keinen direkten Unterschied haben, aber es kommt OOP näher ;)

Catbytes 19. Mär 2005 19:08

Re: Image in den Zwischenspeicher
 
Zitat:

Zitat von Pr0g
Du wirst keinen direkten Unterschied haben, aber es kommt OOP näher ;)

*zustimm*

Ich denk allerdings auch nicht immer dran ;-)


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