Delphi做的ASP组件怎样返回图像?(100分)

  • 主题发起人 主题发起人 一个过客
  • 开始时间 开始时间

一个过客

Unregistered / Unconfirmed
GUEST, unregistred user!
返回文本很简单,可是如果需要返回图像怎么办?我看参数类型只有IPicture啊!

查阅了前面的讨论,看到yysun曾经讨论过IPicture这个接口,可是他是
通过在客户端软件这边把IPicture转换成TPicture然后显示的,在asp里面
怎么显示呢?
 
写到服务器临时目录下,在网页上链接该图片,每次产生新图到临时目录下时删除前一天产生
的临时文件,省得把图片写来写去的费时间,占资源。
 
在组件里把Picture转成stream,再把stream转成variant型
asp里接收,用binarywrite写出来就行了
 
>>再把stream转成variant型

how to?
 
这个是我做的ASP组件里面取Image的过程;
function TmyChart.GetImage: OleVariant;
var S:TmemoryStream;
i,j:integer;
ch:Byte;
Chart1:TChart;
p:pointer;
begin
s:=TmemoryStream.Create;
Chart1:=TChart.Create(nil);
With Chart1 do
begin
Left:= 0;
Top:= 0;
Width:=500;
Height:=350;
Title.Text.Text:='利用TeeChart在ASP组建中生成图形';
View3DOptions.Elevation:= 315;
View3DOptions.Orthogonal:= False;
View3DOptions.Perspective:= 0;
View3DOptions.Rotation := 360;
end;
With TPieSeries.Create(Chart1) do
begin
ParentChart:=Chart1;
Marks.ArrowLength:= 8;
Marks.Visible := True;
SeriesColor := clRed;
PieValues.Name := 'Pie';
PieValues.Order := loNone;
Shadow.Color := 10526880;
FillSampleValues(10);
end;
//将chart转换成GIF格式
With TGIFExportFormat.Create do
try
Panel:=Chart1;
SaveToStream(S);//保存到流里
finally
Free;
end;
Chart1.Free;
j:=S.Size;
result:=varArrayCreate([0,j-1],varByte);//创建variant数组
p:=VarArrayLock(result);
S.Seek(0,soFromBeginning);
S.Read(p^,j);//将GIF流返回,在ASP中用Response.binarywrite xxxx.getimage 就可以输出图形
vararrayunlock(result);
end;
//asp
<%@ language=VBSCRIPT %>
<% response.expires=-1
response.ContentType="image/gif"
dim Achart
set delphiASPobj=server.createobject("project.mychart")
response.binarywrite Delphiaspobj.getimage
set delphiaspobj=nothing
%>
 
程序已测试完成

DELPHI组件代码
function StreamToVariant(Stream: TStream): OleVariant;
var
p: Pointer;
begin
Result := VarArrayCreate([0, Stream.Size - 1], varByte);
p := VarArrayLock(Result);
try
Stream.Position := 0;
Stream.Read(p^, Stream.Size);
finally
VarArrayUnlock(Result);
end;
end;


procedure Tpicture.showpic(var pic: OleVariant);
var
bit:tbitmap;
mystream:tmemorystream;
begin
bit:=tbitmap.Create;
bit.Height:=50;
bit.Width:=100;
bit.Canvas.TextOut(0,0,'Test Image');
mystream:=tmemorystream.create;
bit.SaveToStream(mystream);
mystream.Position:=0;
pic:=StreamToVariant(mystream);

end;

ASP调用
先写一个asp程序image.asp
<%
dim image
Set DelphiASPObj = Server.CreateObject("asp.picture")
DelphiASPObj.showpic image
response.contenttype="image/*"
response.binarywrite image
%>
再写一个页面来调用他
<html>
<img src="image.asp"></img>
</html>
 
好!好!
等洒家测试完毕再给两位论功行赏,哈哈!
 
不错,测试成功。

其实你们两个人的方法是一样的,谢谢了!
 
怎么看不到回帖啊
 
后退
顶部