有无效果较好的图形缩放控件或函数(100分)

  • 主题发起人 主题发起人 AYellow
  • 开始时间 开始时间
A

AYellow

Unregistered / Unconfirmed
GUEST, unregistred user!
我要将TBitmap的图像放大或缩小
Canvas.StretchDraw 效果很差,“画图”的缩放效果都比它强多了
或者我有什么办法可以调用“画图”的缩放功能吗?
 
好像 1st class 中有一个图像平滑缩放的控件。www.51delphi.com 可以下载。
 
http://jansfreeware.com/janfx.zip
janFX is a library of 89 bitmap transformation routines like:
rotate; smooth resize; filters; make seamless; buttonize; color,
focus and light effects; fisheye and twist distortions;
alpha blending; plasma and many more.



 
举个例子:

Var B:Tbitmap; //临时位图
Begin
B:=Tbitmap.Create; //建立临时位图
try
B.Assign(YourBitmap); //采用相同色彩深度
With B do
Begin
Width:=90; //临时位图的大小为90x90
Height:=90;
End;
B.canvas.StretchDraw(B.canvas.Cliprect,YourBitmap); //缩放适应
B.SavetoFile(YourFileName); //保存
finally
B.Free;
end;
End;
 
to:byflyer
Canvas.StretchDraw 效果很差
 
to:xk
janFX的那个Stretch函数我不会用,它有一个很奇怪的参数,我没有看懂它的声明
 
那有没有可以对图符进行矢量放大的控件啊。
 
当然你最好用StretchBlt进行缩放。
 
我有一段代码,自己写的,可以平滑缩放,要不要?
 
我有一个自己写的函数,只有几行,要不要,给我发email:tunlee@sina.com
 
贴上来,交流交流。
我的在laptop里面,现在不在身边。
明天贴上来。 我使用dib实现的,不知你的如何?
 
procedure ZoomBmp(imagen: TBitmap; dWidth, dHeight: Integer; var des: TBitmap);
var
ori: TBitmap;
dispositivo_o, dispositivo_d: HDC;
pepito: HBitmap;
begin
ori := Tbitmap.Create;
des := TBItmap.Create;
ori.handle := imagen.handle;
des.width := dWidth;
des.height := dHeight;
dispositivo_o := CreateCompatibleDC(0);
dispositivo_d := CreateCompatibleDC(0);
SelectObject(dispositivo_o, ori.handle);
pepito := SelectObject(dispositivo_d, des.handle);
SetStretchBltMode(dispositivo_d, {COLORONCOLOR} STRETCH_DELETESCANS);
StretchBlt(dispositivo_d, 0, 0, dWidth, dHeight, dispositivo_o, 0, 0, ori.width, ori.height, SRCCOPY);
SelectObject(dispositivo_d, pepito);
ori.Free;
end;
 
最后还要加上:
DeleteObject(pepito);
DeleteDC(dispositivo_o);
DeleteDC(dispositivo_d);
否则用BoundChecker检查老是报"Resource leak"。
 
谢谢大家了,不过效果都不理想,我有没有办法调用画笔的功能啊?
 
我要在我的程序中调用画笔的功能,而不要运行画笔程序!
 
多人接受答案了。
 
后退
顶部