关于RESIZE改变JPG图片大小的疑问?(50分)

  • 主题发起人 主题发起人 梦空
  • 开始时间 开始时间

梦空

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在需要实现ACDSEE的RESIZE一幅JPG图片的功能,比如原来是800*600,现在我希望是80*60,作为缩微图。使用以下类似代码已经实现了该功能,但是很遗憾,如果我使用DELPHI是可以实现的,如果我使用以下代码,编译成为DLL,就不能被其它软件,比如VB,PB调用了,直接报内存错误,不知道各位大虾有没有类似经验的?谢谢。
不过下面的实现方法是使用了Canvas,并没有直接分析JPG文件。

library resizejpg;

uses
SYSUTILS,
Classes,
WINDOWS,
Graphics,
Jpeg;

function resizeImage(sInImage, sOutImage: string; iHeight, iWidth: integer): boolean;
var
JpgImg : TJpegImage;
BmpImg : TBitmap;
Rectangle: TRect;
begin
try
JpgImg := TJpegImage.Create;
BmpImg := TBitmap.Create;

JpgImg.LoadFromFile(sInImage);
Rectangle := Rect(0, 0, iWidth, iHeight);
with BmpImg do
begin
Width := iWidth;
Height := iHeight;
Canvas.StretchDraw(Rectangle, JpgImg);
end;
finally
JpgImg.Assign(BmpImg);
JpgImg.SaveToFile(sOutImage);
JpgImg.Free;
BmpImg.Free;
end;
Result := True;
end;

exports

resizeImage index 1;

begin

end.
 
谢谢帮我发出,我已经注册了用户了。

因为我们目前的需求是把大图变小,所以不需要重新插值处理。
换句话说,我们目前需要生成拇指缩微图,使用以上代码已经可以实现,
但是做成 dll就不能被vb,pb等调用,是否有其他细节?

比如我也用delphi作了一个从剪贴版中获得图片,然后另存为jpg的
就很顺利完成了。

其实我最疑问的就是为什么我使用了strech后就不能生成好的dll了,是否要特殊处理?

代码如下,在vb,pb中调用顺利:

library xjpg;

uses
SysUtils, Classes, Windows, Graphics,Clipbrd, Jpeg ;

function SaveClipToFile(szFileName:PChar):Boolean;stdcall;export;
var
bm : TBitmap;
jp: TJPEGImage;
begin
result := True;
//如果不是bitmap则返回false
if Clipboard.HasFormat(CF_BITMAP) then
try
bm := TBitmap.Create;
jp := TJPEGImage.Create;
try
bm.Assign(Clipboard);

with jp do
begin
Assign(bm);
SaveToFile(szFileName)
end;
except
result := False;
end
finally
bm.Free;
jp.Free;
end
else
result :=False;
end;


exports

SaveClipToFile index 1;

begin

end.

 
搞定了,函数后面忘记增加stdcall;export;了!所以做成dll不能使用!!!
不好意思,居然犯了这样的错误。
 
多人接受答案了。
 
后退
顶部