GDIを利用したJpegの画像回転

解決


武田  2012-04-22 03:58:58  No: 42035

Delphi6 personalでGDIを導入して画像を回転させようとしています。
下記を参考にしました。
http://www.geocities.jp/asumaroyuumaro/program/tips/gdiplus.html
コンポーネントは指示通り  http://www.progdigy.com/ 
のDownloadのGDI plus API からgdiplus.zipをダウンロードしてpasフォルダを
LIBにいれてパスを通しました。
質問は、Jpegの場合、一旦Bitmapに入れてファイルにsaveして、再び
bmpファイルをロードしてbmp :TGPBitmapに入れていますが、
初心者が考えても無駄のようです。Bitmapから直接にbmp :TGPBitmapに
代入する方法を教えていただけませんか。よろしくお願いします。
uses
    Jpeg,GDIPAPI,GDIPOBJ ;

procedure TForm1.Button1Click(Sender: TObject);
var
    graphics :TGPGraphics;
    bmp :TGPBitmap;
    Jpg:   TJPEGImage;
    Bitmap:TBitmap;
begin
    if OpenDialog1.Execute then
    begin  //フォームのTGPGraphicsオブジェクトを取得
      graphics := TGPGraphics.Create(Canvas.Handle);
      if LowerCase(ExtractFileExt(OpenDialog1.FileName))='.bmp' then
      begin //bmpの場合
          bmp := TGPBitmap.Create(OpenDialog1.FileName);
      end
      else
      begin //Jpegの場合
          Jpg :=TJpegImage.Create ;
          Bitmap:=TBitmap.Create;
          try
          Jpg.LoadFromFile(OpenDialog1.FileName);
              Bitmap.Assign(JPG);              // <-----ここから無駄?
              Bitmap.SaveToFile('Temp.bmp');
              bmp := TGPBitmap.Create('Temp.bmp');
        finally
                Bitmap.Free;
            Jpg.Free;
        end;
      end;
      try
          bmp.RotateFlip(Rotate90FlipNone);//90°回転
          graphics.DrawImage(bmp, 20, 20);
      finally
          bmp.Free;
          graphics.Free;
      end;
    end;
end;


monaa  2012-04-22 06:33:48  No: 42036

GDI+のTGPBitmapは
BMP, JPEG, PNG, GIF, TIFF, WMF, EMFをそのままサポートしています。
何もせず
bmp := TGPBitmap.Create('aaa.jpg');
で開けますよ。


武田  2012-04-22 06:59:04  No: 42037

monaa さんありがとうございました。
強力なコンポーネントだと書いてありましたが
これほどとは、
ということはまだまだ何かできますね。調べてみます。
感謝<(_ _)>


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加