Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme mit JPEGImage (https://www.delphipraxis.net/26030-probleme-mit-jpegimage.html)

Legolas 16. Jul 2004 20:16


Probleme mit JPEGImage
 
Hallo alle zusammen,

ich weise Image1.Picture ein Bild (JPG) zu und möchte das nun in eine Variable (z.b.: Bild: TJPEGimage) kopieren.
Mein bissheriger Versuch lautet so:

Code:
...
var Bild: TJPEGImage;
Bild.Create;
Bild.Assign(Image1.Picture);
...
Hier bekommen ich aber eine EConvertError.

Hat jemand eine Idee wie ich das machen kann?

rantanplan99 16. Jul 2004 21:24

Re: Probleme mit JPEGImage
 
Die Delphi Online-Hilfe biete folgendes Beispiel:

Delphi-Quellcode:
var
  jp: TJPEGImage; //Requires the "jpeg" unit added to "uses" clause.
begin
  jp := TJPEGImage.Create;
  try
    with jp do
    begin
      Assign(Image1.Picture.Bitmap);
      SaveToFile('c:\oneeye.jpg')
    end;
  finally
    jp.Free;
  end;
Bei dir fehlt also nur ein .Bitmap bei deinem Assign Aufruf

SirThornberry 16. Jul 2004 21:38

Re: Probleme mit JPEGImage
 
Wie rantanplan99 schon geschrieben hat fehlt das .Bitmap
Grund: TBitmap und TJPEGImage sind beide von TGraphic abgeleitet und somit erben beide das Assign von TGraphic. TPicture ist wie folgt definiert
Delphi-Quellcode:
TPicture = class(TInterfacedPersistent, IStreamPersist)
und somit von einem ganz anderem Typ

Legolas 16. Jul 2004 21:38

Re: Probleme mit JPEGImage
 
Hallo rantanplan99,

ich habe meine Frage nicht richtig formuliert. Wie du es schreibst geht es auch aber ich will den Inhalt de Imagekomponente dann in einem Array speichern:

Code:
type
  Test = Record
    Text1: String;
    Text2: String;
    Text3: String;
    Vorschau: TJPEGImage;
  end;

  Tts = array of Test;

var
  Form1: TForm1;
  fs: TFileStream;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var len: LongInt;
    ts: Tts;
    i: Integer;
    JPEG: TJPEGImage;
begin
  JPEG:=TJPEGImage.Create;
  SetLength(ts,2);
  ts[0].Text1:=Edit1.Text;
  ts[0].Text2:=Edit2.Text;
  ts[0].Text3:=Edit3.Text;

  JPEG.Assign(Image1.Picture.Bitmap);
  ts[0].Vorschau.Assign(Image1.Picture.Bitmap); <- Fehler!!!!
...
Vieleicht kann jemand was mit diesem stück Quellcode anfangen. Der Inhalt soll jetzt in dem Array gespeichert werden.
Ich bekomme aber immer an der arkierten Stelle eine Zugriffsverletzung.

SirThornberry 16. Jul 2004 21:42

Re: Probleme mit JPEGImage
 
ganz simpel: dein Befehl
Delphi-Quellcode:
ts[0].Vorschau.Assign(Image1.Picture.Bitmap);
versucht eine Methode von "ts[0].Vorschau" zu verwenden. Allerdings hast du niergends vorher
Delphi-Quellcode:
ts[0].Vorschau := TJPEGImage.Create;
aufgerufen

Legolas 16. Jul 2004 21:51

Re: Probleme mit JPEGImage
 
Hallo SirThornberry,

das wars, Danke. Aber ich glaube meine ganze Idee funktioniert nicht so richtig, ich habe nicht das gefühl das das Bild in der Datei gespeichert wird.

Kann sich jemand bitte mal diesen Quellcode vornehmen?

Code:
type
  TForm1 = class(TForm)
    Image1: TImage;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type
  Test = Record
    Text1: String;
    Text2: String;
    Text3: String;
    Vorschau: TJPEGImage;
  end;

  Tts = array of Test;

var
  Form1: TForm1;
  fs: TFileStream;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var len: LongInt;
    ts: Tts;
    i: Integer;
    JPEG: TJPEGImage;
begin
  SetLength(ts,2);
  ts[0].Text1:=Edit1.Text;
  ts[0].Text2:=Edit2.Text;
  ts[0].Text3:=Edit3.Text;

  ts[0].Vorschau:=TJPEGImage.Create;
  ts[0].Vorschau.Assign(Image1.Picture.Bitmap);

  label1.Caption:=IntToStr(sizeof(ts[0].Vorschau));
  fs:=TFileStream.Create('D:\test.adb',fmCreate);
  len:=Length(ts);
  fs.Write(len,sizeof(len));
  for i:=0 to Length(ts)-1 do
  begin
    Len:=Length(ts[i].Text1);
    fs.Write(len,sizeof(len));
    fs.Write(pchar(ts[i].Text1)^,len);
    Len:=Length(ts[i].Text2);
    fs.Write(len,sizeof(len));
    fs.Write(pchar(ts[i].Text2)^,len);
    Len:=Length(ts[i].Text3);
    fs.Write(len,sizeof(len));
    fs.Write(pchar(ts[i].Text3)^,len);
    fs.Write(ts[i].Vorschau,sizeof(ts[i].Vorschau));
  end;
end;
Fehler habe ich laut Delphi nicht mehr drin.

SirThornberry 16. Jul 2004 21:59

Re: Probleme mit JPEGImage
 
anstelle von
Delphi-Quellcode:
fs.Write(pchar(ts[i].Text1)^,len);
kannst du auch
Delphi-Quellcode:
fs.Write(ts[i].Text1[1],len);
scrheiben.

Wie ich das so sehe speichert er deine JPEG nicht in die datei weil du
Delphi-Quellcode:
fs.Write(ts[i].Vorschau,sizeof(ts[i].Vorschau));
aufrufst und
Delphi-Quellcode:
sizeof(ts[i].Vorschau)
4 ist da Vorschau ein TJPEGImage ist und somit nur ein Pointer

du solltest das ganze so machen
Delphi-Quellcode:
ts[i].Vorschau.SaveToStream(fs);

Legolas 17. Jul 2004 21:10

Re: Probleme mit JPEGImage
 
Hallo SirThornberry,

danke für deine Hilfe. Jetzt funktioniert es wie ich es mir vorgestellt habe. :mrgreen:


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