Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   D2010, TImage. SaveToFile error (https://www.delphipraxis.net/163583-d2010-timage-savetofile-error.html)

bernhard_LA 5. Okt 2011 16:27

D2010, TImage. SaveToFile error
 
Liste der Anhänge anzeigen (Anzahl: 2)
ich habe einen seltsamen Fehler beim Aufruf der Funktion TImage.Picture.Bitmap.SaveToFile ,
die Bitmap kommt in zwei Teilen zerlegt in der Datei an, eine "linke Spalte ca. 200 pixel" breit
wird als rechte Spalte in der Bitmap abgespeichert. Anbei ein Beispielbild.

(zusätzlich verwende ich TScollBox zur Anzeige von TImage)

stahli 5. Okt 2011 18:10

AW: D2010, TImage. SaveToFile error
 
Ich würde mal den Fehler außen herum suchen und nicht direkt im SaveToFile.
Bist Du sicher, dass Du das Bild vor dem Speichern korrekt vorliegen hast?
Da Du eine ScrollBox erwähnst: Könnte es vielleicht sein, dass Du die Daten "falsch" vom Canvas kopierst...?

bernhard_LA 6. Okt 2011 10:59

AW: D2010, TImage. SaveToFile error
 
der testcode spielt fehlerfrei; scrollbars sind da und BMP wird korrekt angezeigt.
In der echten Anwendung wird im Hintergrund viel mit atempbmp gemacht,
Delphi-Quellcode:
    processFunctions (  atempbmp )

 
    atempbmp.savetoFile( ......) //   geht auch noch
     
    ......

    Image1.Picture.Bitmap.Assign(atempbmp);

     
    Image1.Picture.Bitmap.SaveToFile('c:\temp\out2.bmp');  // geht falsch
Delphi-Quellcode:
unit Unit_savebmp;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    ScrollBox1: TScrollBox;
    Image1: TImage;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }

    atempbmp : TBitmap;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
       Image1.Picture.LoadFromFile('c:\temp\out.bmp');

       atempbmp.Assign( Image1.Picture.Bitmap);

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
      Image1.Picture.Bitmap.Assign(atempbmp);

      Image1.Picture.Bitmap.SaveToFile('c:\temp\out2.bmp');
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
     atempbmp.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    atempbmp :=TBitmap.Create;
end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz