画像回転

type
TRGBArray = array[0 .. 0] of TRGBTriple;
PRGBArray = ^TRGBArray;

// 左回転サンプル
procedure TForm1.Button1Click(Sender: TObject);
var
Src, Dest: TBitmap;
Row, Col: Integer;
SrcRow, DestRow: PRGBArray;
Offset: Integer;
begin
Src := TBitmap.Create;
Dest := TBitmap.Create;

try
// Image1からSrcにハンドルを移す
Src.Handle := Image1.PIcture.Bitmap.ReleaseHandle;
// PixelFormatを24bitに設定
Src.PixelFormat := pf24bit;
Dest.PixelFormat := pf24bit;
// Destへ領域をコピー(幅と高さをクロス)
Dest.Height := Src.Width;
Dest.Width := Src.Height;

try
// Src水平方向のループ
for Row := 0 to Src.Height -1 do
begin
SrcRow := Src.ScanLine[Row];
// Src垂直方向のループ
for Col := 0 to Src.Width -1 do
begin
// Destを下からセットするためのオフセット
Offset := (Dest.Height -1) – Col;
// Destの配列をクロスさせる
DestRow := Dest.ScanLine[Offset];
// 配列をセットする
DestRow[Row].rgbtRed := SrcRow[Col].rgbtRed;
DestRow[Row].rgbtGreen := SrcRow[Col].rgbtGreen;
DestRow[Row].rgbtBlue := SrcRow[Col].rgbtBlue;
end;
end;
// 成功した場合、Destのハンドルを返す
Image1.Picture.Bitmap.Handle := Dest.ReleaseHandle;
except
// 失敗した場合、Srcのハンドルを返す
Image1.Picture.Bitmap.Handle := Src.ReleaseHandle;
end;
finally
Src.Free;
Dest.Free;
end;
end;

// 右回転サンプル
procedure TForm1.Button2Click(Sender: TObject);
var
Src, Dest: TBitmap;
Row, Col: Integer;
SrcRow, DestRow: PRGBArray;
Offset: Integer;
begin
Src := TBitmap.Create;
Dest := TBitmap.Create;
try
// Image1からSrcにハンドルを移す
Src.Handle := Image1.PIcture.Bitmap.ReleaseHandle;
// PixelFormatを24bitに設定
Src.PixelFormat := pf24bit;
Dest.PixelFormat := pf24bit;
// Destへ領域をコピー(幅と高さをクロス)
Dest.Height := Src.Width;
Dest.Width := Src.Height;
try
// Src水平方向のループ
for Row := 0 to Src.Height -1 do
begin
SrcRow := Src.ScanLine[Row];
// Destを右からセットするためのオフセット
Offset := (Dest.Width -1) – Row;
// Src垂直方向のループ
for Col := 0 to Src.Width -1 do
begin
// Destの配列をクロスさせる
DestRow := Dest.ScanLine[Col];
// 配列をセットする
DestRow[Offset].rgbtRed := SrcRow[Col].rgbtRed;
DestRow[Offset].rgbtGreen := SrcRow[Col].rgbtGreen;
DestRow[Offset].rgbtBlue := SrcRow[Col].rgbtBlue;
end;
end;
// 成功した場合、Destのハンドルを返す
Image1.Picture.Bitmap.Handle := Dest.ReleaseHandle;
except
// 失敗した場合、Srcのハンドルを返す
Image1.Picture.Bitmap.Handle := Src.ReleaseHandle;
end;
finally
Src.Free;
Dest.Free;
end;
end;

画像種別変更

use節にJpegを追加

uses Jpeg;

//BmpからJpeg
procedure TForm1.Button1Click(Sender: TObject);
Var
 Jpg : TJpegImage;
 Bmp : TBitMap ;
begin
 Jpg :=TJpegImage.Create;
 Bmp :=TBitmap.Create;

 Bmp.LoadFromFile(‘C:\From.bmp’);
 Jpg.Assign(BMP);
 Jpg.SaveToFile(‘C:\To.jpg’ );

 Bmp.Free ;
 Jpg.Free;
end;

//JpegからBmp
procedure TForm1.Button1Click(Sender: TObject);
var
 Jpg : TJpegImage; 
 Bmp : TBitmap;
begin
 Jpg :=TJpegImage.Create ;
 Bmp :=TBitmap.Create;

Jpg.LoadFromFile(‘From.jpg’);
 Bmp.Assign(JPG);
 Bmp.SaveToFile(‘To.bmp’)

Jpg.Free;
 Bmp.Free ;
end;