怎么处理图片

xuexiziji 2008-04-14 12:06:39
客户选择完图片后,想处理一下。比如 1024 768 的变成 112 46的,然后另外给他保存一下。
初学,请教我一下。不胜感激。
...全文
202 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccdarkness 2008-04-14
  • 打赏
  • 举报
回复
这样转的话图片失真比较严重,有什么办法或者控件可以保证较高的清晰度?
lihuasoft 2008-04-14
  • 打赏
  • 举报
回复
以TBitmap为例,它有一个CopyRect方法可以用:



{具体的尺寸计算,请自己根据BMP.Width和Height换算}
var
FBmp, FBmp2: TBitmap;

procedure TForm1.Button1Click(Sender: TObject);
begin
FBmp.LoadFromFile('c:\test.bmp');{导入一个BMP图片}
//Image1.Picture.Bitmap.Assign(FBmp);{这只是看效果,不必需}
//Image1.AutoSize := True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FBmp := TBitmap.Create;
FBmp2 := TBitmap.Create;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
FBmp2.Width := 30;{这里只是演示另存为宽30像素、高50像素。具体按比率另存的话,请自行写换算公式}
FBmp2.Height := 50;
FBmp2.Canvas.CopyRect(FBmp2.Canvas.ClipRect, FBmp.Canvas, FBmp.Canvas.ClipRect);
//Image1.Picture.Bitmap.Assign(FBmp2);{这句只是看效果}

FBmp2.SaveToFile('c:\result.bmp');{另存为}
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
FBmp.Free;
FBmp2.Free;
end;
hongqi162 2008-04-14
  • 打赏
  • 举报
回复
使用GDI+做一个缩略图
xuexiziji 2008-04-14
  • 打赏
  • 举报
回复
谢谢,谢谢了。不是 载入原图的原因。我载入了。不过现在也已经弄好了。
万分感谢。
lihuasoft 2008-04-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xuexiziji 的回复:]
ihuasoft兄弟,bmp的我试过是 可以用的,不过jpg该怎么写
[/Quote]

TJpegImage和TBitmap可以互相转换的
我的方法会造成失真,因此自己没信心了,你自己网上找一下“TJpegImage和TBitmap相互转换”的代码吧。
here 2008-04-14
  • 打赏
  • 举报
回复
晕,首先你得载入原图啊,image1.loadfromfile('1.jpg')
xuexiziji 2008-04-14
  • 打赏
  • 举报
回复
恩,加上这两句话了,可以运行。
不过奇怪的是,保存的图片就只有 一个白框呀。图片内容都没了。
here 2008-04-14
  • 打赏
  • 举报
回复
当然不能用,你还得加上
backbmp:=tbitmap.Create;
bmp:=tbitmap.Create;
xuexiziji 2008-04-14
  • 打赏
  • 举报
回复
ihuasoft兄弟,bmp的我试过是 可以用的,不过jpg该怎么写
xuexiziji 2008-04-14
  • 打赏
  • 举报
回复
非常感谢各位,不过楼上的,把你的代码直接拷贝过来不能使用的。
here 2008-04-14
  • 打赏
  • 举报
回复
   procedure zoomout(x,y:integer);
var
bmp,backbmp:Tbitmap;
begin
backbmp.Assign(image1.Picture.Graphic);
try
begin
bmp.Width:=x;
bmp.Height:=y;
SetStretchBltMode(bmp.Canvas.Handle,HALFTONE);
StretchBlt(Bmp.Canvas.Handle,0,0,x,y,
backBmp.Canvas.Handle,0,0,backBmp.Width,backBmp.Height,SRCCOPY);
image1.Picture.Graphic.Assign(bmp);
image1.savetofile('1.jpg')
end;
except
begin
showmessage('程序出错了);
halt(0);
end;
end;
end;

这个效果好一点,jpeg的话只要加入jepg单元.
xuexiziji 2008-04-14
  • 打赏
  • 举报
回复
不好意思,我说的不太清楚。我用的是delphi5,用户想把 jpg的图片,1024 768 的 变成 100 80的,
lihuasoft兄弟说的,bmp的,是不是通用呀,我试了不能用。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧