关于intraweb中的IWimage的问题,高手们救救小弟(200分)

  • 主题发起人 主题发起人 小争
  • 开始时间 开始时间

小争

Unregistered / Unconfirmed
GUEST, unregistred user!
我用IWimage来显示图像时发现无论我怎么设置属性也不能获得我想要的结果,
我想要的是,比如我的图片很大但我的IWimage确小得多,我要不变形的显示出来
居然不行,我记得用Timage时用autosize行了,可这个IWimage不行啊,一用autosize
图片就会涨出控件变得很大。
高手们想想啊,有什么好办法呢?
 
做一个正好的图片[:D]
别打我呀
 
我晕,真的想揍你,不过没法子的话只能这么做了啊[:(]
 
哥哥你可别揍我,各位大虾也别见笑,我也是这么做的呀[:(]
 
好象只有这个办法了!
 
不变形的显示出来?是什么意思,是直接缩放图片吗?
我用的是IW的6.0.22
IWImage中有两个属性:AutoSize和UseSize,用它们是可以实现缩放的呀
只要把AutoSize设为False,图片就不会涨出IWImage了
你所说的是不是这个意思
 
人家说的是图片根据控件大小缩放
控件好象没这个功能吧
 
我用的是V5.1.22好像也有这个问题,图片多大,控件就自己变多大
没办法,我就先定义好图片的大小再说了!
 
好长时间,可是还是没解决,谁有办法?我再顶一下。
 
刚刚看到你的e-mail,你说的问题可以解决,
拿显示bmp图片为例说吧,iwimage1为显示的控件。
定义两个变量 bmpic,tempbmp:Tbitmap;rect:Trect;
//设置矩形大小
rect.left:=0;rect.top:=0;
rect.right:=iwimage1.width;rect.bottom:=iwimage1.height;
//设置内存中图片的大小
bmpic:=Tbitmap.create;tempbmp:=Tbitmap.create;
bmpic.width:=iwimage1.width;
bmpic.height:=iwimage1.height;
//在tempbmp中载入图片,根据你自己的方式载入,我用的是loadfromfile,
tempbmp.loadfromfile(filename);
//把tempbmp中的图像缩小画到bmpic上
bmpic.canvas.stretchdraw(rect,tempbmp);
//把bmpic中的图像贴到iwimage1上
iwimage1.picture.assign(bmpic);
这就ok了,应该能看明白吧,要是不行我再给你发个小例子,:)
 
好像不行,不过你倒是给我了个新思路,我再试试
 
你是想实现对于大的图片按比例对宽、高进行缩小的吗?
这样不知道行不行?
Iwimage1.picture.Loadfromfile(filename);
W:=Iwimage1.picture.width;
H:=Iwimage1.picture.height;
if W>600 then //假设图片宽度〉600则进行缩小
begin
Iwimage1.width:=600;
H:=round(h/(W/600));
Iwimage1.height:=h;
end;
 
我说的方法是经过我亲手测试的,你好好试试吧,没问题,给分吧!嘿嘿。
就算你想限制显示图片的比例也可以稍加修改就实现(设置rect的比例)!
 
大家都提了些很好的方法,不过还是不行啊。
先说tjj的方法,用stretchdraw会使图片质量大大下降,这先不管,可是这样也不行,
因为我的图片很大的,我要做的不过是预览的窗口,所以要小图就行,关键的问题是
图片是用户上传的,也就是我不知道他的图片究竟是多大,图片的比例是多少,可能
有的是2:3或是3:2,所以很头痛。
loxtln的方法我以前试过,在autosize和usesize为true的情况下语句才能起作用。如:
iwimage1.Width:=206;
if iwimage1.Height>154 then
iwimage1.Height:=154;
可问题是,这样的话还是会变形。iwimage1控件无论如何都是width=206,height=154
不能按图片的比例缩为:width=110,height=154;所以我现在正在试把比例算出来。
不知我说明白了没有?谢谢大家了,还希望大家能继续关注。
 
IWImage.rendersize:=true;
 
终于弄出来了,贴上大家来看看:
iwimage2.Picture.LoadFromFile('xxxx')
b1:=iwimage2.Width/iwimage2.Height; //图片真实比例
b2:=206/154; // iwimage控件的大小,求出比例,
iwimage2.Width:=206; //图片肯定要比iwimage大,所以不判断了
iwimage2.Height:=154;
if b2>=b1 then //就是纵向变形的时候
begin
iwimage2.Width:=Trunc(iwimage2.Height*b1);
iwimage2.Left:=iwimage2.Left+Trunc((206-iwimage2.Width)/2); //使图片居中
end
else
begin //这是横向变形
iwimage2.Height:=Trunc(iwimage2.Width/b1);
iwimage2.top:=iwimage2.top+Trunc((154-iwimage2.Height)/2); //使图片居中
end;
就这么简单,唉,一开始想错了。贴子结束,二个小时后给分。
 
to jackyzjh
iwimage2.RenderSize:=true;不行吧
编译都通不过,说cannot assign a read-only property
属性只读?
 
多人接受答案了。
 
我也是那样做的,如果有好的办法请和告诉我.
 
后退
顶部