如何保存这种的BMP文件(编程 webbrowesr) 300分!!!!急!!!(300分)

  • 主题发起人 主题发起人 xliangh
  • 开始时间 开始时间
X

xliangh

Unregistered / Unconfirmed
GUEST, unregistred user!
有这样的1个网页,由2个 frame 组成,第1个 frame 里面 有这样的代码:
<IMG height=40 src="http:/www.jy.js.cn/graph.php" width=40 border=0>

类似于 计数器 差不多的东西,随时间他回变化,我用 UrlDownloadToFile 载不下来。
但是在 浏览器里面却可以用 “另存为” 保存为 BMP 文件.
我想 随时跟踪 这个网页上的这个图标,并能保存下来,要通过程序实现,具体怎么做,
我用的是 webbrowser 控件。

我很着急,300分奉送!!!
 
//将它抓下来,保存为c:/tmp.bmp,适当的调整WebBrowser的大小和图片相近。
procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate('http:/www.jy.js.cn/graph.php');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
bitmap:TBitmap;
can:TCanvas;
begin
bitmap:=TBitmap.Create;
can:=TCanvas.Create;
can.Handle:=GetDC(GetWindow(GetWindow(WebBrowser1.Handle,GW_CHILD),GW_CHILD));
with bitmap do
begin
width:=WebBrowser1.Width;
height:=WebBrowser1.Height;
canvas.CopyRect(canvas.ClipRect,can,can.ClipRect);
end;
bitmap.SaveToFile('c:/tmp.bmp');
image1.Picture.Bitmap.LoadFromFile('c:/tmp.bmp');

end;
 
这样做,我试了下,
保存下来的图片连外框都一起有了
而却大了很多.
iapollo,再问你下, 这样截图,在后台运行,就是窗口最小化的时候,是不是同样有效??
另外,能不能通过 webbrowser 的什么 方法把精确的图取到??
iapollo, 感谢你,先给你100分!!
 
具体说
能不能截取webbroweser1 中某个区域的 图片 保存??
比如:
width:=WebBrowser1.Width; 修改为 width:=40;
height:=WebBrowser1.Height; 修改为 height:=40;
canvas.CopyRect(canvas.ClipRect,can,can.ClipRect); 这句怎么修改?
(我想取webbrowser 的 200,300,200+40,300+40)的区域
具体代码怎么实现?
还有就是后台不能 实现啊。
再帮我1次。
 
//这是修改过的程序,它可以精确的截取网上480x50的图片,
//你适当的修改一下rect的大小就可以了。确实,这种方法在后台不能用。
procedure TForm1.getpic;
var
bitmap:TBitmap;
can:TCanvas;
rect:TRect;
begin
bitmap:=TBitmap.Create;
can:=TCanvas.Create;
can.Handle:=GetDC(GetWindow(GetWindow(WebBrowser1.Handle,GW_CHILD),GW_CHILD));
rect.Left:=20;
rect.Top:=17;
rect.Right:=500;
rect.Bottom:=67;
with bitmap do
begin
width:=480;
height:=50;
canvas.CopyRect(canvas.ClipRect,can,rect);
end;
bitmap.SaveToFile('c:/tmp.bmp');
image1.Picture.Bitmap.LoadFromFile('c:/tmp.bmp');
end;
 
是这样啊
再等等看,有没有办法后台实现
因为我已经看见有人可以后台实现了
 
而却这样取下来的图和 当前的显示色彩,分辨率都有关系。
怎么才能和 当前的设置无关?
比如 16位 24位 32位都能存为 16位的图
 
试试下面这个,用了indy控件,要不行我就没辙了:
IdHTTP1: TIdHTTP;
...
procedure TForm1.Button1Click(Sender: TObject);
var
tmpStream:TFileStream;
begin
tmpStream:=TFileStream.Create('c:/get.bmp',fmCreate);
try
idhttp1.Get('http://www.jy.js.cn/graph.php',tmpStream);
finally
tmpStream.Free;
end;
image1.Picture.Bitmap.LoadFromFile('c:/get.bmp');
end;
 
http://www.jy.js.cn/graph.php在浏览器中无法显示。
它真正的页面URL是什么?
 
'http://www.jy.js.cn/graph.php'在浏览器中无法显示,
包含它的页面的 URL 是什么?
 
用paintto试试
如果不行,用IViewXXXX接口的draw方法肯定可以的。
 
procedure TForm1.Button2Click(Sender: TObject);
var
ViewObject: IViewObject;
sourceDrawRect: TRect;
Temp,Test:TBitmap;
begin
if Web.Document <> nil then
try
Test:=TBitmap.Create;
Test.PixelFormat:=pf24bit;
Temp:=TBitmap.Create;
Temp.PixelFormat:=pf24bit;
Temp.Width:=Web.Width;
Temp.Height:=Web.Height;

Web.Document.QueryInterface(IViewObject, ViewObject);
if ViewObject <> nil then
try
sourceDrawRect := Rect(0, 0, Temp.Width, Temp.Height);
ViewObject.Draw(DVASPECT_CONTENT, 1, nil, nil, Self.Handle,
Temp.Canvas.Handle, @sourceDrawRect, nil, nil, 0);

finally
ViewObject._Release;

Test.Width:=Temp.Width-GetSystemMetrics(SM_CXVSCROLL);
Test.Height:=Temp.Height;
BitBlt(Test.Canvas.Handle,0,0,Test.Width,Test.Height,Temp.Canvas.Handle,0,0,SrcCopy);

Image1.Picture.Assign(Test);
Temp.Free;
Test.Free;
end;

except
end;

end;
 
还是不能后台运行啊!
连接要在某个连接先打开以后,才能打开的
就是他先判断你当前的页面在什么地方,他才显示什么
 
多人接受答案了。
 
其实这个问题没有妥善解决!
 
jsxjd 你有什么办法实现后台吗?
 
我无法浏览这个文件 'http:/www.jy.js.cn/graph.php',
你告诉我哪个页面包含此文件!
 
后退
顶部