再次提问,另加100分,是问题“?” 还是“!”(100分)

  • 主题发起人 主题发起人 tosleep
  • 开始时间 开始时间
T

tosleep

Unregistered / Unconfirmed
GUEST, unregistred user!
图形计数器,由图像文件(bmp)组合,形成一个新的bmp图像,
然后,返回给访问者。可问题是,有时会出现图像模糊不清或残缺的现象,怀疑
是bmp的原因,求高手给一个说法。
2、如果做一个动态gif计数器有没有简单的方法,不是在主页里写入太多的代码。
(如6位:<img src=" "><img src=" ">
。。。。)
 
1.可以看看你的算法吗,那样才好说。
2.可以用你1.的解决方法吖,生成一个独立的图象文件。
 
我写过一个 ISAPI 计数器,可能对你有帮助:

我的思路是:

先用TBitmap生成图形,
然后转存到TJPEGImage,
然后写到TMemoryStream,
最后用Response.SendStream()输出。

请看源代码:

unit main;

interface

uses
Windows, Messages, SysUtils, Classes, HTTPApp, Graphics, JPEG,
ImgList, Controls;

type
TWebCounter = class(TWebModule)
CountList: TImageList;
procedure WebCounteraCounterAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;

var
WebCounter: TWebCounter;

implementation

{$R *.DFM}

procedure TWebCounter.WebCounteraCounterAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
FileName,Count:string;
CF:TextFile;
MS:TMemoryStream;
Bitmap:TBitmap;
i:integer;
begin
//读取并增加计数器的数字
FileName:=Request.QueryFields.Values['filename'];
FileName:='d:/inetpub/wwwroot/counter/data/'+FileName+'.txt';
if FileExists(FileName) then
begin
AssignFile(CF,FileName);
Reset(CF);
ReadLn(CF,Count);
Count:=IntToStr(StrToInt(Count)+1);
while Length(Count)<6 do
begin
Count:='0'+Count;
end;
Rewrite(CF);
WriteLn(CF,Count);
CloseFile(CF);
end;
//把字符转换为图形
Bitmap:=TBitmap.Create;
with Bitmap do
begin
Width:=72;
Height:=18;
for i:=0 to 5 do
begin
CountList.Draw(Bitmap.Canvas,i*11+3,3,StrToInt(Count[i+1]),true)
end;
end;
MS:=TMemoryStream.Create;
//转换为THPEGimage格式
with TJPEGImage.Create do
begin
Assign(Bitmap); //从TBitmap中复制
SaveToStream(MS); //转存到“内存流”
Free;
end;
MS.Position:=0; //这几句必不可少!!
Response.ContentType:='image/jpg'; //设置返回格式为:“image/jpg”
Response.SendResponse; //
Response.SendStream(MS); //从内存流中发送
MS.Free;
Bitmap.Free;
end;

end.

调用方法:

<p>您是第<img src="/scripts/counter.dll?webname=test">位访问者</p>

很容易就可把它改成CGI
 
Thanks shangcm and CJF very much,
我的源码可以写但太长,怕不愿看,跟shangcm的大同小异(不过,我在oncreate事件里
加了读取服务器路径代码),用jpeg我也试过,但什么原因会使图形残缺呢?是数据传输的
原因(tcp/ip好像很准确的)还是其它原因呢?
另外,关于动画gif合成图好像不行,因为图像不是单帧的。或者我不会,请指点
 
图像模糊不清或残缺?可以看看吗?或者你比较前后的情况如何?至于2的问题,同
Shangcm的方法,生成一个图形文件,然后显示。
 
给我个邮件地址,我传给你试试,但不保证每次都发生,只是偶尔,
如果图像完整,重新打开ie请多试几次吧:)(尤其是在网络中出现,本机出现较少)
 
哦,如果只有偶尔,那可能是程序的问题也说不定,你是使用流方式显示图形的吗?
 
多谢答复。
 
后退
顶部