Thema: Delphi Graphics32-Frage!!

Einzelnen Beitrag anzeigen

bingo72

Registriert seit: 18. Aug 2006
Ort: Österreich
180 Beiträge
 
Delphi 5 Professional
 
#1

Graphics32-Frage!!

  Alt 25. Jul 2007, 09:23
Hallo Experten!!

Ich verwende Graphics32 mit inkludiertem Filter zum Resizen von Images nach folgenden Muster:

Delphi-Quellcode:
function TfmMain.RescalePic(aFileName: String; aPic: TImage; aCount: Integer): TBitmap;
Var
  R: TKernelResampler;
  ASrcImage: TBitMap32;
  ADstImage: TBitMap32;
  ABmp: TBitMap;
  AJPeg: TJPegImage;
  AScale: Extended;
  lPageIndex : Integer;
begin
  // Zum Abspeichern als Jpeg
  AJPeg := TJPEGImage.Create;

  // als Buffer von TImage32 zu TJpeg
  ABmp := TBitMap.Create;
  // Originalbild
  ASrcImage := TBitmap32.Create;
  // verkleinertes Bild
  ADstImage := TBitMap32.Create;

  Screen.Cursor := crHourGlass;

  try
    // Datei laden
    ASrcImage.LoadFromFile(aFileName);

    // Skalierungsfaktor (z.B. 0.5 zum Verkleinern auf 50 %
    // in diesem Beispiel wir das Bild max. 300 Pixel breit oder hoch sein
    //AScale := (300 / Max(ASrcImage.Width, ASrcImage.Height));

    // Zielbild Größe einstellen
    ADstImage.Width := 300;//Round(ASrcImage.Width * AScale);
    ADstImage.Height := 400;//Round(ASrcImage.Height * AScale);

    R := TKernelResampler.Create(ASrcImage);
    //R.Kernel := TLanczosKernel.Create;
    lPageIndex := pcMinimize.ActivePageIndex;
    R.Kernel := fFilter[aCount].Create;

    // Zielbild ist fertig
    ADstImage.Draw(ADstImage.BoundsRect, ASrcImage.BoundsRect, ASrcImage);

    // direkt geht es leider nicht in das AJpeg
    ABmp.Assign(ADstImage);

    //if AJPeg.CompressionQuality <> defJpegQuality then
      //AJPeg.CompressionQuality := defJpegQuality;

    //AJPeg.Assign(ABmp);

    aPic.Picture.Bitmap := ABmp;
    result := ABmp;

    // TDMImmoBild(DataModule).StoreImages(AJPeg);
    //AJPeg.SaveToFile('C:\Dokumente und Einstellungen\Thomas\Desktop\reklame1.jpg');

  finally
    Application.ProcessMessages;
    Screen.Cursor := crDefault;
    AJPeg.Free;
    //ABmp.Free;
    ADstImage.Free;
    ASrcImage.Free;
  end;
end;
Nun das funktioniert ja auch alles ganz schön, wenn man 32-bit-Images darstellen kann. Für meine Anwendung kann ich aber nicht immer blind davon ausgehen, daß die Graphikkarten auf Kundenrechnern 32-bit darstellen können.
Wir haben auch noch einen antiken Win95-Rechner für Testzwecke herumstehen und der meckert sobald die Draw-Methode von TBitmap32 aufgerufen wird. Auch kein Wunder, denn ein Blick auf die Bildschirmoptionen verrät, daß er nur 16- bzw. 24 bit darstellen kann.
Nun suche ich nach einer Art 'Ersatzlösung' für genau diese, wenn auch sicherlich wenige Fälle.

Daher meine Frage: Was würdet ihr für die Fälle tun, wo der Rechner keine 32-bit Farben dastellen kann??

LG
Thomas
  Mit Zitat antworten Zitat