Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#18

AW: JPEG CompressionQuality ermitteln

  Alt 26. Okt 2017, 08:39
So wie mir bekannt ist kannst du diese nur zuweisen..

Ich habe meinen eigenen Wrapper..

Delphi-Quellcode:
    QualityModeInvalid = -1;
    QualityModeDefault = 0;
    QualityModeLow = 1; // Best performance
    QualityModeHigh = 2; // Best rendering Quality
Delphi-Quellcode:
function GDIP_SaveImageToFile(filename: WideString; image: Cardinal; Quality: Integer
): GPSTATUS; stdcall;
var
  rSplit: TSplitStrArray;
  encoderCLSID: TGUID;
  ext: string;
  IntI: Integer;
  format: string;
  EncoderParameters: PEncoderParameters;
  SaveQuality: Integer;
  listSize: UINT;
begin

  ext := ExtractFileExt(filename);
  rSplit := Split(IMAGETYPES, ';');

  for IntI := 0 to High(rSplit) do
  begin
    if rSplit[IntI] = ext then
    begin
      case IntI of
        0:
          format := 'image/jpeg';
        1:
          format := 'image/png';
        2:
          format := 'image/bmp';
        3:
          format := 'image/gif';
        4:
          format := 'image/tiff';
        5:
          format := 'image/x-icon';
        6:
          format := 'image/x-emf';
        7:
          format := 'image/x-wmf';
      else
        begin
          result := UnknownImageFormat;
          exit;
        end;
      end;
      break;
    end;
  end;
  SkinEngine.GetEncoderClsid(format, encoderCLSID);

  GdipGetEncoderParameterListSize(Image, @encoderCLSID, listSize);
  getmem(EncoderParameters, listSize);

  GdipGetEncoderParameterList(Image, @encoderClsid, listSize, EncoderParameters);

  SaveQuality := max(min(Quality, 100), 0);
  if (SaveQuality = 0) then
    SaveQuality := 100;

  EncoderParameters.Count := 1;
  EncoderParameters.Parameter[0].Guid := EncoderQuality;
  EncoderParameters.Parameter[0].NumberOfValues := 1;
  EncoderParameters.Parameter[0].Type_ := 4;
  EncoderParameters.Parameter[0].Value := @SaveQuality;

  Result := GdipSaveImageToFile(image, PWideChar(filename), @encoderCLSID, EncoderParameters);

  freemem(EncoderParameters, listSize);
end;
so könnte das aussehen.

gruss

Geändert von EWeiss (26. Okt 2017 um 08:45 Uhr)
  Mit Zitat antworten Zitat