情况变了一点,问题就来了!救急!!! ( 积分: 50 )

  • 主题发起人 主题发起人 波龙周
  • 开始时间 开始时间

波龙周

Unregistered / Unconfirmed
GUEST, unregistred user!
以前,也是用的这个方法实现的图象的90度旋转,不过那时image中是bmp图象,
现在是jpeg图象,于是也用了个转化函数,可是却怎么也转不过来,没什么动静,
具体的函数如下,希望大家能指出其错误所在啊
////////////////////指定图象的旋转//////////////////
///////////////////////////////////////////////////
procedure TForm1.ToolButton7Click(Sender: TObject);
begin
image1.Picture.Bitmap.PixelFormat := pf24bit;
RotateMethod(GraphicToBitmap(image1.Picture));
//image1.Repaint;
//image1.Assign(msbitmap);
end;
/////////////////////////旋转函数///////////
///////////////////////////////////////////
procedure Tform1.RotateMethod(Bitmap:TBitmap);
var
aStream: TMemorystream;
//内存流
header: TBITMAPINFO;
dc: hDC;
P: ^THelpRGB;
x, y, b, h: Integer;
RowOut: pRGBArray;
begin
//创建内存流
aStream := TMemoryStream.Create;
//设置大小,必须是4的倍数
aStream.SetSize(Bitmap.Height * Bitmap.Width * 4);
with header.bmiHeader do //操作位图文件
begin
biSize := SizeOf(TBITMAPINFOHEADER); //大小
biWidth := Bitmap.Width; //位图宽
biHeight := Bitmap.Height; //位图高
biPlanes := 1;
biBitCount := 32;
//无压缩
biCompression := 0;
biSizeimage := aStream.Size;
biXPelsPerMeter := 1; //水平分辨率
biYPelsPerMeter := 1; //竖直分辨率
biClrUsed := 0;
biClrImportant := 0;
end;
dc := GetDC(0);
P := aStream.Memory;
GetDIBits(dc, Bitmap.Handle, 0, Bitmap.Height, P, header, dib_RGB_Colors);
ReleaseDC(0, dc);
b := bitmap.Height; //源图高
h := bitmap.Width; //源图宽
//指定要创建的位图的大小尺寸
bitmap.Width := b;
bitmap.height := h;
for y := 0 to (h - 1) do
begin
rowOut := Bitmap.ScanLine[y]; //获取新的位图信息
P := aStream.Memory; //设置文件指针
inc(p, y); //指针移位
for x := 0 to (b - 1) do
begin
rowout[x] := p^.rgb; //进行数据转移
inc(p, h);
end;
end;
aStream.Free; //释放资源
end;
 
以前,也是用的这个方法实现的图象的90度旋转,不过那时image中是bmp图象,
现在是jpeg图象,于是也用了个转化函数,可是却怎么也转不过来,没什么动静,
具体的函数如下,希望大家能指出其错误所在啊
////////////////////指定图象的旋转//////////////////
///////////////////////////////////////////////////
procedure TForm1.ToolButton7Click(Sender: TObject);
begin
image1.Picture.Bitmap.PixelFormat := pf24bit;
RotateMethod(GraphicToBitmap(image1.Picture));
//image1.Repaint;
//image1.Assign(msbitmap);
end;
/////////////////////////旋转函数///////////
///////////////////////////////////////////
procedure Tform1.RotateMethod(Bitmap:TBitmap);
var
aStream: TMemorystream;
//内存流
header: TBITMAPINFO;
dc: hDC;
P: ^THelpRGB;
x, y, b, h: Integer;
RowOut: pRGBArray;
begin
//创建内存流
aStream := TMemoryStream.Create;
//设置大小,必须是4的倍数
aStream.SetSize(Bitmap.Height * Bitmap.Width * 4);
with header.bmiHeader do //操作位图文件
begin
biSize := SizeOf(TBITMAPINFOHEADER); //大小
biWidth := Bitmap.Width; //位图宽
biHeight := Bitmap.Height; //位图高
biPlanes := 1;
biBitCount := 32;
//无压缩
biCompression := 0;
biSizeimage := aStream.Size;
biXPelsPerMeter := 1; //水平分辨率
biYPelsPerMeter := 1; //竖直分辨率
biClrUsed := 0;
biClrImportant := 0;
end;
dc := GetDC(0);
P := aStream.Memory;
GetDIBits(dc, Bitmap.Handle, 0, Bitmap.Height, P, header, dib_RGB_Colors);
ReleaseDC(0, dc);
b := bitmap.Height; //源图高
h := bitmap.Width; //源图宽
//指定要创建的位图的大小尺寸
bitmap.Width := b;
bitmap.height := h;
for y := 0 to (h - 1) do
begin
rowOut := Bitmap.ScanLine[y]; //获取新的位图信息
P := aStream.Memory; //设置文件指针
inc(p, y); //指针移位
for x := 0 to (b - 1) do
begin
rowout[x] := p^.rgb; //进行数据转移
inc(p, h);
end;
end;
aStream.Free; //释放资源
end;
 
这是转化函数
function Tform1.GraphicToBitmap(MyPictrue :TPicture) :TBitmap;
begin
Result :=TBitmap.Create;
with Result do
begin
Width :=MyPictrue.Width;
Height :=MyPictrue.Height;
result.PixelFormat:=pf24bit;
Canvas.Draw(0,0,MyPictrue.Graphic);
end;
end;
 
后退
顶部