bmp :TGPBitmapをjpg(またはbmp)ファイルに保存するには。

解決


武田  2012-04-22 09:37:50  No: 42038

先に質問させていただいた「GDIを利用したJpegの画像回転」の逆ですが
bmpを回転加工などして再び保存したいのですが、うまくいきません。
質問  bmp :TGPBitmapをjpg(またはbmp)ファイルに保存するには。
よろしくご指導をお願いいたします。

procedure TForm1.Button1Click(Sender: TObject);
var
    graphics :TGPGraphics;
    bmp :TGPBitmap;
    Jpg:   TJPEGImage;
    X,Y:integer;
    w, h: double;
begin
    begin  //フォームのTGPGraphicsオブジェクトを取得
    graphics := TGPGraphics.Create(Image1.Canvas.Handle);
    bmp := TGPBitmap.Create(OpenDialog1.FileName);

    try
        bmp.RotateFlip(Rotate90FlipNone);//90°回転
        //Image1は余白が入るのでbmp をここで保存したい。
        ?????????
    w :=bmp2.GetWidth  * ratio;
    h :=bmp2.GetHeight * ratio;
        //真ん中に表示
    X:= Trunc((Image1.Width- w) / 2);
    Y:= Trunc((Image1.Height- h) / 2);
        graphics.DrawImage(bmp, X, Y);//余白が入る
    finally
        bmp.Free;
        graphics.Free;
    end;
end;


monaa  2012-04-23 00:48:13  No: 42039

ググれば出てきますぞー。
「めもニャンだむ」さんのHP
http://blog.livedoor.jp/junki560/archives/22895515.html

//GDI+を使った方法
procedure TForm1.Button3Click(Sender: TObject);
var
  graphics :TGPGraphics;
  bmp :TGPBitmap;
begin
  graphics := TGPGraphics.Create(Canvas.Handle);
  bmp := TGPBitmap.Create(Edit1.Text);
  try
    bmp.RotateFlip(Rotate90FlipNone);//90°回転
    graphics.DrawImage(bmp, 0, 0);
    bmp.Save(Edit1.Text + '_R.bmp',ImageBMPClsid );
  finally
    bmp.Free;
    graphics.Free;
  end;
end;

//TBitmapを使った方法
procedure TForm1.Button4Click(Sender: TObject);
var
  graphics :TGPGraphics;
  bmp :TGPBitmap;
  bmp2:TBitmap;
begin
  bmp := TGPBitmap.Create(Edit1.Text);
  bmp2 := TBitmap.Create;
  bmp2.SetSize(bmp.GetHeight,bmp.GetWidth);
  graphics := TGPGraphics.Create(bmp2.Canvas.Handle);
  try
    bmp.RotateFlip(Rotate90FlipNone);//90°回転
    graphics.DrawImage(bmp, MakeRect(0, 0, bmp2.Width, bmp2.Height));
    bmp2.SaveToFile(Edit1.Text + '_R2.bmp');
  finally
    bmp.Free;
    graphics.Free;
    bmp2.Free;
  end;
end;


武田  2012-04-23 05:04:58  No: 42040

monaaさん解決しました。
どうもありがとうございました。<(_ _)>
今までず〜っとやってましたが、
情報も少なくGDI+というのはやはり特殊なんですね。
しかし、今まで使っていたコードより処理スピードは圧倒的に早いです。
拡大縮小も追加していく予定です。
また教えてください。
では。


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

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






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