Delphi-PRAXiS
Seite 2 von 3     12 3      

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


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