关于RESIZE改变JPG图片大小的疑问?

newaqiao 2003-05-21 10:32:56
我现在需要实现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.

...全文
171 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Nightmare 2003-05-21
  • 打赏
  • 举报
回复
最初那个是错的, 不能导出string类型的参数,其他语言不支持,要使用stdcall。
newaqiao 2003-05-21
  • 打赏
  • 举报
回复
因为我们目前的需求是把大图变小,所以不需要重新插值处理。
换句话说,我们目前需要生成拇指缩微图,使用以上代码已经可以实现,
但是做成 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.

Nightmare 2003-05-21
  • 打赏
  • 举报
回复
resize是要resample,不是简单的stretch

1,183

社区成员

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

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