![]() |
AW: GDI + tif - MultiPage - Bild wird dunkler
Zitat:
Selber speicher ich in unseren TIFFs die Bilder als LZW-komprimiertes Bitmap, also so ähnlich wie auch beim PNG. |
AW: GDI + tif - MultiPage - Bild wird dunkler
ich hoffe mit
![]() ich muss halt nur zwei oder mehr Parameter vor dem Speichern setzen Am allerbesten wäre es wenn ich alle Parameter auslesen und dann vor dem Speichern übergeben könnte |
AW: GDI + tif - MultiPage - Bild wird dunkler
Liste der Anhänge anzeigen (Anzahl: 1)
@bummi : leider ist der Ansatz mit *.png nicht erfolgreich ; Mein Rechner
ändert das Kompressionsformat und das Farbformat PixelFormat16bppRGB565 hat auf meinem PC anscheinend keine Bedeutung :evil: |
AW: GDI + tif - MultiPage - Bild wird dunkler
hast Du mal geschaut, da sind noch diverse andere Pixelformate definiert...
Im Zweifelsfalls kannst Du auch mal für die Ausgabe ein ordinäres TBitmap erzeugen, Pixelfomat und Größe festlegen und auf dessen Canvas malen. |
AW: GDI + tif - MultiPage - Bild wird dunkler
ich denke mein Problem besteht darin :
egal mit welchen Parametern ich die Tiff oder png Datei ertselle, dieser Mistkerl (mein PC) verwendet immer seine default Werte (dabei setzt er die Kompression auf LWZ, setzt die DPI Werte und ändert das Farb-Schema) Dieser Code hat bei Mir halt keine Wirkung : dest.Save(WideString(NewFilename), encoderClsid, @encoderParameters);
Delphi-Quellcode:
procedure TGDIPMainForm.btn_splitt_tif_fileClick(Sender: TObject); var encoderClsid: TGUID; encoderParameters: TEncoderParameters; // parameterValue: TEncoderValue; CompressionValue: ULONG; ColorDepthValue: ULONG; quality: ULONG; stat: TStatus; MulitFrameImage: TGPImage; PageIndex: integer; PageCount: integer; NewFilename: String; dest: TGPBitmap; g: TGPGraphics; begin stat_main.SimpleText := ' processing ' + edt_imagefilename.Text; RootFolder := edt_outFolder.Text; /// Get an tif image from the disk. MulitFrameImage := TGPImage.Create(edt_imagefilename.Text); /// Get the CLSID of the JPEG, TIFF ... encoder. GetEncoderClsid('image/png', encoderClsid); /// Before we call Image::Save, we must initialize an /// EncoderParameters object. The EncoderParameters object /// has an array of EncoderParameter objects. In this /// case, there is only one EncoderParameter object in the array. /// The one EncoderParameter object has an array of values. /// In this case, there is only one value (of type ULONG) /// in the array. We will let this value vary from 0 to 100 // encoderParameters.Count := 2; // encoderParameters.Parameter[1].Guid := EncoderCompression; // encoderParameters.Parameter[1].Type_ := EncoderParameterValueTypeLong; // encoderParameters.Parameter[1].NumberOfValues := 2; // encoderParameters.Parameter[1].Value := @CompressionValue; // encoderParameters.Count := 1; // encoderParameters.Parameter[0].Guid := EncoderColorDepth; // encoderParameters.Parameter[0].Type_ := EncoderParameterValueTypeLong; // encoderParameters.Parameter[0].NumberOfValues := 1; // encoderParameters.Parameter[0].Value := @ColorDepthValue; // ColorDepthValue := PixelFormat16bppGrayScale; // ColorDepthValue := PixelFormat16bppRGB565 // CompressionValue := CompressionNone; // Save the image as ... a with quality level 0...100 encoderParameters.Count := 1; encoderParameters.Parameter[0].Guid := EncoderQuality; encoderParameters.Parameter[0].Type_ := EncoderParameterValueTypeLong; encoderParameters.Parameter[0].NumberOfValues := 1; encoderParameters.Parameter[0].Value := @quality; quality := 100; PageCount := GetFrameCount(MulitFrameImage); ProgressBarPage.Min := 0; ProgressBarPage.Max := PageCount; for PageIndex := 0 to PageCount do begin ProgressBarPage.StepBy(1); PageFolder := 'page' + IntToStr(PageIndex) + '\'; ThisFolder := RootFolder + PageFolder; CreateFolderOnDemand(ThisFolder); /// Display and save the page (index 0 ... MAX ). MulitFrameImage.SelectActiveFrame(encoderClsid, PageIndex); /// ------------------- VErsion TIFF --------------------------------- NewFilename := ThisFolder + IntToStr(PageIndex) + '__' + ExtractFileName(edt_imagefilename.Text); // stat := MulitFrameImage.Save(WideString(NewFilename), encoderClsid, // @encoderParameters); /// ------------------- Version png BUMMI --------------------------------- NewFilename := ChangeFileExt(NewFilename, '.png'); dest := TGPBitmap.Create(MulitFrameImage.GetWidth, MulitFrameImage.GetHeight, PixelFormat16bppRGB565); g := TGPGraphics.Create(dest); g.DrawImage(MulitFrameImage, MakePoint(0, 0)); dest.Save(WideString(NewFilename), encoderClsid, @encoderParameters); g.Free; dest.Free; if (stat = Ok) then stat_main.SimpleText := 'saved successfully (png).' else stat_main.SimpleText := ' Attempt to save failed.'; Application.ProcessMessages; end; MulitFrameImage.Free; end; |
AW: GDI + tif - MultiPage - Bild wird dunkler
PNG:
mit PixelFormat8bppIndexed dest.Save( WideString(NewFilename), encoderClsid, nil ); kommt es bei mir wie erwartet mit 8-Bit wenn ich einen Encoder 'image/bmp' geht PixelFormat16bppRGB565 , bei PNG nicht (wird 32-bit) Ich bin nicht der Experte was die Formate angeht .... |
AW: GDI + tif - MultiPage - Bild wird dunkler
@Bummi : * Unterscheidet sich Dein Code von meiner Routine ?
kann leider die Tif Datei nicht Public machen * Was wäre denn der beste Weg das ganze als TBitmap zu speichern |
AW: GDI + tif - MultiPage - Bild wird dunkler
Bei mir sind die encoderParameters nil ...,da ich als PNG bzw. BMP ausgebe
|
AW: GDI + tif - MultiPage - Bild wird dunkler
Hallo Zusammen,
vielen Dank für die echt guten Hinweise in den ganzen Threads zum Thema TIF , GDI+, Array[0..0]. Leider läuft mein Programm mit meinen Tif Bildern immer noch nicht. Ich habe meine Aufgabe über einen Umweg (Handarbeit) gelöst, das Demo Projekt zum Thema "Tif Splitter" habe ich unter ![]() Grüße B. |
AW: GDI + tif - MultiPage - Bild wird dunkler
Hallo,
versuch es mal hiermit:
Delphi-Quellcode:
Hierbei sollten die Farben erhalten beleiben.
procedure ExtractTiffPages(aFileName: string);
var encoderParameters : TEncoderParameters; parameterValue : TEncoderValue; image : TGPImage; count, frameCount : UINT; DimensionIDs : PGUID; i, j : integer; encoderClsid : TGUID; OutFile : string; FilePath : string; type TGUIDDynArray = array of TGUID; begin FilePath := ExtractFilePath(aFileName); Image := TGPImage.Create(aFileName); // Initialize the one EncoderParameter object. encoderParameters.Count := 1; encoderParameters.Parameter[0].Guid := EncoderCompression; encoderParameters.Parameter[0].Type_ := EncoderParameterValueTypeLong; encoderParameters.Parameter[0].NumberOfValues := 1; encoderParameters.Parameter[0].Value := @parameterValue; parameterValue := EncoderValueCompressionLZW; // How many frame dimensions does the Image object have? count := image.GetFrameDimensionsCount; GetMem(DimensionIDs, count * SizeOf(TGUID)); // Get the list of frame dimensions from the Image object. image.GetFrameDimensionsList(DimensionIDs, count); GetEncoderClsid('image/tiff', encoderClsid); for i := 0 to count - 1 do begin // Get the number of frames in dimension. frameCount := image.GetFrameCount(TGUIDDynArray(DimensionIDs)[i]); for j := 0 to frameCount - 1 do begin OutFile := FilePath + IntToStr(i) + '-' + IntToStr(j) + '.tif'; image.SelectActiveFrame(TGUIDDynArray(DimensionIDs)[i], j); image.Save(OutFile, encoderClsid, @encoderParameters); end; end; freemem(DimensionIDs); image.Free; end; Gruß Gernot |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:57 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