先に質問させていただいた「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;
ググれば出てきますぞー。
「めもニャンだむ」さんの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;
monaaさん解決しました。
どうもありがとうございました。<(_ _)>
今までず〜っとやってましたが、
情報も少なくGDI+というのはやはり特殊なんですね。
しかし、今まで使っていたコードより処理スピードは圧倒的に早いです。
拡大縮小も追加していく予定です。
また教えてください。
では。
ツイート | ![]() |