Delphi imge控件如何加载缩放的png图片

孤独的小浪浪 2014-05-09 04:24:12
1.png图片按照一定的比例缩放。例如:4:3;
2加载的图片和form窗体大小一致并且图片能够完整显示在form窗体上。
3.设置form窗口autosize属性和image stretch=true;无法达到完整显示图片的效果。
4.求各路大神指点一二,小弟不胜感激。谢谢。。。。
...全文
1665 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤独的小浪浪 2014-05-15
  • 打赏
  • 举报
回复
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,jpeg,pngimage, StdCtrls, ExtDlgs, ExtCtrls; type TForm1 = class(TForm) Image1: TImage; OpenPictureDialog1: TOpenPictureDialog; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Imagefile:string; begin openpicturedialog1.Filter:='所有文件(*.*);图片文件(*.png)|*.*;*.png' ; if OpenPictureDialog1.Execute then begin Image1.Stretch:=True; Imagefile:=OpenPictureDialog1.FileName; Image1.Picture.LoadFromFile(Imagefile); end; end; end. jpg图片可以缩放,png就是不想我用的是d7.
引用 14 楼 Avan_Lau 的回复:
不行就贴出你的代码。大家才能有依据地分析。
金卯刀 2014-05-15
  • 打赏
  • 举报
回复
不行就贴出你的代码。大家才能有依据地分析。
孤独的小浪浪 2014-05-15
  • 打赏
  • 举报
回复
谢谢各位大哥,大神的耐心解答,我的问题解决了,是控件问题pngimage的控件版本太老了,我换了个新的就行啦。
孤独的小浪浪 2014-05-15
  • 打赏
  • 举报
回复
谁有新版本的pngimage控件,可以分享下或者给个链接,谢谢了
金卯刀 2014-05-15
  • 打赏
  • 举报
回复
引用 17 楼 u012398506 的回复:
[quote=引用 16 楼 jankercsdn 的回复:] 15楼说的,设置个Stretch:=True属性就好了,就象window桌面的自动拉伸 如果不是BMP格式的图像,先转换成bmp格式再操作(拉伸缩放操作就不用转换了)
我就是想要png不用转换成其他格式也能达到拉伸的效果[/quote]
引用 12 楼 aniugee 的回复:
新建一个工程,窗体上放一个TPaintBox,再放一个按钮,在按钮事件中写入如下代码:

procedure TForm1.btn1Click(Sender: TObject);
var
  Png:TPNGObject;
begin
  Png := TPNGObject.Create;
  Png.LoadFromFile('c:\1.png');
  Png.Draw(PaintBox1.Canvas,PaintBox1.Canvas.ClipRect);
  Png.Free;
end;
随便改变PaintBox1的大小,再次点击按钮,图片会自动缩放。
不是有人贴了这样的代码给你,而你贴出代码又跟他不一致。回复却说不行。 到底他给出的代码,你是否有验证过:Png.Draw(PaintBox1.Canvas,PaintBox1.Canvas.ClipRect);??
孤独的小浪浪 2014-05-15
  • 打赏
  • 举报
回复
引用 16 楼 jankercsdn 的回复:
15楼说的,设置个Stretch:=True属性就好了,就象window桌面的自动拉伸 如果不是BMP格式的图像,先转换成bmp格式再操作(拉伸缩放操作就不用转换了)
我就是想要png不用转换成其他格式也能达到拉伸的效果
看那山瞧那水 2014-05-15
  • 打赏
  • 举报
回复
15楼说的,设置个Stretch:=True属性就好了,就象window桌面的自动拉伸 如果不是BMP格式的图像,先转换成bmp格式再操作(拉伸缩放操作就不用转换了)
孤独的小浪浪 2014-05-14
  • 打赏
  • 举报
回复
大哥还是不行的啊,还是无法完整显示出来
引用 12 楼 aniugee 的回复:
新建一个工程,窗体上放一个TPaintBox,再放一个按钮,在按钮事件中写入如下代码:

procedure TForm1.btn1Click(Sender: TObject);
var
  Png:TPNGObject;
begin
  Png := TPNGObject.Create;
  Png.LoadFromFile('c:\1.png');
  Png.Draw(PaintBox1.Canvas,PaintBox1.Canvas.ClipRect);
  Png.Free;
end;
随便改变PaintBox1的大小,再次点击按钮,图片会自动缩放。
aniugee 2014-05-13
  • 打赏
  • 举报
回复
新建一个工程,窗体上放一个TPaintBox,再放一个按钮,在按钮事件中写入如下代码:

procedure TForm1.btn1Click(Sender: TObject);
var
  Png:TPNGObject;
begin
  Png := TPNGObject.Create;
  Png.LoadFromFile('c:\1.png');
  Png.Draw(PaintBox1.Canvas,PaintBox1.Canvas.ClipRect);
  Png.Free;
end;
随便改变PaintBox1的大小,再次点击按钮,图片会自动缩放。
aniugee 2014-05-12
  • 打赏
  • 举报
回复
引用 4 楼 u012398506 的回复:
大哥你说的这个方法只能加载一张特定的png并把图片画在窗体或者image控件上,并不是可以变化的啊,我想要的效果是可以变化的,像幻灯片一样的功能啊。谢谢啊大哥
var list: TList; list.add(Png1); list.add(Png2); 。。。 list.add(Pngn); 然后根据你的的业务逻辑,在绘制的时候取出当前需要画的Png图片。 最好先表达清楚你的需求,大家才能想办法帮你。
孤独的小浪浪 2014-05-12
  • 打赏
  • 举报
回复
引用 9 楼 aniugee 的回复:
既然你现在可以实现画一幅Png到左侧显示,那剩下的还有什么问题 不就是对listbox中的Png多加个循环吗
不是的我是想把png图片完整的显示在image控件中,image控件的大小是不变的。图片的大小比较大,不能完全显示在控件中。我就是想把整张图片显示到image控件中。。。像缩略图那种效果
孤独的小浪浪 2014-05-12
  • 打赏
  • 举报
回复
引用 5 楼 unearth 的回复:
先加载图片,然后再改变TForm 客户区的大小

 with img1 do        //TImage
  begin
    Top := 0;
    Left := 0;
    AutoSize := true;
    Picture.LoadFromFile('test.bmp');
  end;
  with Self do       //TForm
  begin
    ClientWidth := img1.Width;
    ClientHeight := img1.Height;
  end;
大哥你的代码试过了达不到我想要的效果,你这个方法有点类似autosize,不过还是谢谢你
aniugee 2014-05-12
  • 打赏
  • 举报
回复
既然你现在可以实现画一幅Png到左侧显示,那剩下的还有什么问题 不就是对listbox中的Png多加个循环吗
孤独的小浪浪 2014-05-12
  • 打赏
  • 举报
回复
对不起各位大哥我表达不太清楚如有不足之处敬请原谅海涵。。
我采用的listbox列表框把png格式的图片加载到列表中,如下图所示。然后程序按照列表内加载的图片的顺序逐一读取显示在左边的image框中。显示的图片规格是1024*768的,在左边的image框无法完整显示出来,我想在imge控件大小固定的情况下能够把图变完全显示在其中。。谢谢了
Frank.WU 2014-05-10
  • 打赏
  • 举报
回复
引用 4 楼 u012398506 的回复:
大哥你说的这个方法只能加载一张特定的png并把图片画在窗体或者image控件上,并不是可以变化的啊,我想要的效果是可以变化的,像幻灯片一样的功能啊。谢谢啊大哥
你不如先将你的问题一次性说清楚?
孤独de猫 2014-05-10
  • 打赏
  • 举报
回复
先加载图片,然后再改变TForm 客户区的大小

 with img1 do        //TImage
  begin
    Top := 0;
    Left := 0;
    AutoSize := true;
    Picture.LoadFromFile('test.bmp');
  end;

  with Self do       //TForm
  begin
    ClientWidth := img1.Width;
    ClientHeight := img1.Height;
  end;
孤独的小浪浪 2014-05-09
  • 打赏
  • 举报
回复
大哥你说的这个方法只能加载一张特定的png并把图片画在窗体或者image控件上,并不是可以变化的啊,我想要的效果是可以变化的,像幻灯片一样的功能啊。谢谢啊大哥
孤独的小浪浪 2014-05-09
  • 打赏
  • 举报
回复
大哥不行啊
孤独的小浪浪 2014-05-09
  • 打赏
  • 举报
回复
引用 1 楼 aniugee 的回复:
var Png: TPngObject; Png.Draw(窗体或其他位图上.Canvas,Rect(你指的宽高));
Debugger Exception Notification --------------------------- Project Project1.exe raised exception class EInvalidOperation with message 'Can only modify an image if it contains a bitmap'. Process stopped. Use Step or Run to continue. --------------------------- OK Help
aniugee 2014-05-09
  • 打赏
  • 举报
回复
var Png: TPngObject; Png.Draw(窗体或其他位图上.Canvas,Rect(你指的宽高));

1,184

社区成员

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

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