Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   GDI+ viele Encoder parameter setzen ARRAY[0.0.] (https://www.delphipraxis.net/169314-gdi-viele-encoder-parameter-setzen-array%5B0-0-%5D.html)

bernhard_LA 11. Jul 2012 14:36


GDI+ viele Encoder parameter setzen ARRAY[0.0.]
 
wie setze ich denn mehrere Werte im encoderParameters gleichzeitig ??
Mein Versuch wie folgt : (geht leider nicht zum comilieren)


Delphi-Quellcode:


   encoderParameters.Count := 3;
   encoderParameters.Parameter[2].Guid := EncoderCompression;
   encoderParameters.Parameter[2].Type_ := EncoderParameterValueTypeLong;
   encoderParameters.Parameter[2].NumberOfValues := 1;
   encoderParameters.Parameter[2].Value := @CompressionValue;
  CompressionValue := CompressionNone;


    encoderParameters.Count := 3;
    encoderParameters.Parameter[1].Guid := EncoderColorDepth;
    encoderParameters.Parameter[1].Type_ := EncoderParameterValueTypeLong;
    encoderParameters.Parameter[1].NumberOfValues := 1;
   encoderParameters.Parameter[1].Value := @ColorDepthValue;

   // ColorDepthValue := PixelFormat16bppGrayScale;
   ColorDepthValue := PixelFormat16bppRGB565;


  /// 
  //  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 := 1;


die Struktur ist ein Array [0 .. 0] ...


Delphi-Quellcode:
//---------------------------------------------------------------------------
// Encoder Parameter structure
//---------------------------------------------------------------------------

  {$EXTERNALSYM EncoderParameter}
  EncoderParameter = record
    Guid          : TGUID;  // GUID of the parameter
    NumberOfValues : ULONG;  // Number of the parameter values
    Type_          : ULONG;  // Value type, like ValueTypeLONG etc.
    Value         : Pointer; // A pointer to the parameter values
  end;
  TEncoderParameter = EncoderParameter;
  {$EXTERNALSYM TEncoderParameter}
  PEncoderParameter = ^TEncoderParameter;
  {$EXTERNALSYM PEncoderParameter}

//---------------------------------------------------------------------------
// Encoder Parameters structure
//---------------------------------------------------------------------------

{$ALIGN 1}
  {$EXTERNALSYM EncoderParameters}
  EncoderParameters = record
    Count    : UINT;              // Number of parameters in this structure
    Parameter : array[0..0] of TEncoderParameter; // Parameter values
  end;
  TEncoderParameters = EncoderParameters;
  {$EXTERNALSYM TEncoderParameters}
  PEncoderParameters = ^TEncoderParameters;
  {$EXTERNALSYM PEncoderParameters}
{$ALIGN ON}

bernhard_LA 12. Jul 2012 13:41

AW: GDI+ viele Encoder parameter setzen ARRAY[0.0.]
 
hat niemenad eine Idee wie mit obigem Array [0..0] aus dem ersten Post viele Parameter übergebe ??

Das Problem ist wohlähnlich zu : http://www.delphipraxis.net/98740-array-%5B0-0%5D.htmlaber alle meine Versuche scheitern :-(

Bummi 12. Jul 2012 14:04

AW: GDI+ viele Encoder parameter setzen ARRAY[0.0.]
 
Schau mal ob das hilft

http://trac.assembla.com/delphiexter...nit1.pas?rev=1

Gernot Huber 12. Jul 2012 14:07

AW: GDI+ viele Encoder parameter setzen ARRAY[0.0.]
 
Hallo bernhard_LA,

ich habe das ganze so gelöst:

Delphi-Quellcode:
procedure ProzessImage(aSource, aDest : string);
type
  TMyEncoderParameters = packed record
    Count    : UINT;              // Number of parameters in this structure
    Parameter : array[0..1] of TEncoderParameter; // Parameter values
  end;

var
  encoderParameters: TMyEncoderParameters;
  parameterValue1: TEncoderValue;
  parameterValue2: TEncoderValue;
.
.
.
begin
  encoderParameters.Count := 2;
  encoderParameters.Parameter[0].Guid := EncoderSaveFlag;
  encoderParameters.Parameter[0].Type_ := EncoderParameterValueTypeLong;
  encoderParameters.Parameter[0].NumberOfValues := 1;
  encoderParameters.Parameter[0].Value := @parameterValue1;

  encoderParameters.Parameter[1].Guid := EncoderCompression;
  encoderParameters.Parameter[1].Type_ := EncoderParameterValueTypeLong;
  encoderParameters.Parameter[1].NumberOfValues := 1;
  encoderParameters.Parameter[1].Value := @parameterValue2;
.
.
.
Gruß
Gernot

bernhard_LA 12. Jul 2012 15:42

AW: GDI+ viele Encoder parameter setzen ARRAY[0.0.]
 
aktuell scheitere ich jetzt daran gültige Werte zu übergeben, Farbtiele und Qualität wollen als Parameter einen Integer und keinen TEncoderValue;
Wenn ich die Parameter wie im Code angegeben übergebe kann ich das erzeugte Bild nicht mehr mir IRFANVIEW öffen (Falsche Bildkodierung :-( )


Delphi-Quellcode:


  parameterValue1: TEncoderValue;
  parameterValue2: TEncoderValue;
  parameterValue3: integer;
  parameterValue4: integer;


  encoderParameters.Count := 3;
  encoderParameters.Parameter[0].Guid := EncoderSaveFlag;
  encoderParameters.Parameter[0].Type_ := EncoderParameterValueTypeLong;
  encoderParameters.Parameter[0].NumberOfValues := 1;
  encoderParameters.Parameter[0].Value := @parameterValue1;

  encoderParameters.Parameter[1].Guid := EncoderCompression;
  encoderParameters.Parameter[1].Type_ := EncoderParameterValueTypeLong;
  encoderParameters.Parameter[1].NumberOfValues := 1;
  encoderParameters.Parameter[1].Value := @parameterValue2;

  encoderParameters.Parameter[2].Guid := EncoderColorDepth;
  encoderParameters.Parameter[2].Type_ := EncoderParameterValueTypeLong;
  encoderParameters.Parameter[2].NumberOfValues := 1;
  encoderParameters.Parameter[2].Value := @parameterValue3;

  encoderParameters.Parameter[0].Guid := EncoderQuality;
  encoderParameters.Parameter[0].Type_ := EncoderParameterValueTypeLong;
  encoderParameters.Parameter[0].NumberOfValues := 1;
  encoderParameters.Parameter[0].Value := @parameterValue4;

  parameterValue1 := EncoderValueMultiFrame;
  parameterValue2 := EncoderValueCompressionNone;
  parameterValue3 := PixelFormat16bppRGB565;
  parameterValue4 := 100;

Gernot Huber 13. Jul 2012 07:39

AW: GDI+ viele Encoder parameter setzen ARRAY[0.0.]
 
Probier es mal so aus:

Delphi-Quellcode:
  parameterValue1: TEncoderValue;
  parameterValue2: TEncoderValue;
  parameterValue3: ULONG;
  parameterValue4: ULONG;

  encoderParameters.Count := 3;
  encoderParameters.Parameter[0].Guid := EncoderSaveFlag;
  encoderParameters.Parameter[0].Type_ := EncoderParameterValueTypeLong;
  encoderParameters.Parameter[0].NumberOfValues := 1;
  encoderParameters.Parameter[0].Value := @parameterValue1;
 
  encoderParameters.Parameter[1].Guid := EncoderCompression;
  encoderParameters.Parameter[1].Type_ := EncoderParameterValueTypeLong;
  encoderParameters.Parameter[1].NumberOfValues := 1;
  encoderParameters.Parameter[1].Value := @parameterValue2;
 
  encoderParameters.Parameter[2].Guid := EncoderColorDepth;
  encoderParameters.Parameter[2].Type_ := EncoderParameterValueTypeLong;
  encoderParameters.Parameter[2].NumberOfValues := 1;
  encoderParameters.Parameter[2].Value := @parameterValue3;
 
  encoderParameters.Parameter[3].Guid := EncoderQuality;
  encoderParameters.Parameter[3].Type_ := EncoderParameterValueTypeLong;
  encoderParameters.Parameter[3].NumberOfValues := 1;
  encoderParameters.Parameter[3].Value := @parameterValue4;
 
  parameterValue1 := EncoderValueMultiFrame;
  parameterValue2 := EncoderValueCompressionNone;
  parameterValue3 := PixelFormat16bppRGB565;
  parameterValue4 := 100;
Gruß
Gernot


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