Einzelnen Beitrag anzeigen

Theseus

Registriert seit: 21. Jun 2011
20 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#1

DNG- und Tiff-Bilder in Bitmaps umwandeln

  Alt 5. Okt 2011, 11:13
Nachdem ich die verschiedenste Bildformate anzeigen lassen kann (Danke für die Hilfe aus dem Forum), möchte ich nun daraus Bitmaps machen, die ich weiter bearbeiten kann. Das gelingt mir für einige Formate nicht aber für DNG, (evtl. CR2) und TIFF. Hier mein Programm:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtDlgs, ExtCtrls, pngimage, jpeg, gifimg;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  mybitmap : TBitmap;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
// Image1.Picture.RegisterFileFormat('CR2','CR2 Format',TWICImage);
  Image1.Picture.RegisterFileFormat('DNG','DNG Format',TWICImage);
  mybitmap := TBitmap.Create;
  mybitmap.PixelFormat := PF24bit;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
    if OpenDialog1.execute then
    begin
       Image1.Picture.LoadFromFile(openDialog1.FileName);
       //das folgende funktioniert mit den verschiedensten Bildformaten: bmp, jpg, gif, tif, png, dng
       // Bilder werden angezeigt und im alten Format gespeichert
       Image1.Picture.SaveToFile(ExtractFilePath(openDialog1.FileName) + 'test1' + ExtractFileExt(openDialog1.FileName) );
       // das nun folgende funktioniert nur mit bmp-Bildern, ansonsten hat test2.bmp 0 Byte
       // außerdem verschwindet das Bild von Form1 - alles ohne Fehlermeldung :-(
       mybitmap.assign(Image1.picture.bitmap);
       mybitmap.PixelFormat := PF24bit;
       mybitmap.SaveToFile(ExtractFilePath(openDialog1.FileName) + 'test2.bmp');
    end;
end;
end.

{ Das folgende funktioniert für bmp, jpg, png, gif
Ich weiß aber nicht nicht wie man tif- und dng- Bilder behandeln kann

var
jpg : TJPEGImage;
gif : TGifImage;
png : TPngImage;
// ?? tiff :
// ?? dng :
s : string;
begin
    s := directory+ExtractFilename(currentfile);
    if (pos('.gif', lowercase(s)) = length(s)-3) then
    begin
          GIF := TGIFImage.Create;
          try
            GIF.LoadFromFile(s);
            mybitmap.Assign(GIF);
            mybitmap.pixelformat := pf24bit;
          finally
            GIF.free;
          end;
    end
    else
    if (pos('.png', lowercase(s)) = length(s)-3) then
    begin
          png := TPNGimage.Create;
          try
            png.LoadFromFile(s);
            mybitmap.assign(png);
            mybitmap.pixelformat := pf24bit;
          finally
            png.free;
          end;
    end
    else
    if (pos('.jpg', lowercase(s)) = length(s)-3) then
    begin
          jpg:=TJPEGImage.Create;
          jpg.Performance :=jpBestQuality;
          jpg.ProgressiveDisplay := false;
          try
            jpg.LoadFromFile(s);
            mybitmap.Assign(jpg);
            mybitmap.PixelFormat:= pf24Bit;
          finally
            jpg.free;
          end;
    end;
}
Danke für hilfreiche Tipps, Theseus
  Mit Zitat antworten Zitat