Var
MS: TFileStream;
mem: TMemoryStream;
Http: TIdHTTP;
rs:string;
Begin
Http := TIdHTTP.Create(self);
mem := TMemoryStream.Create;
try
Http.Get(Edit2.Text,mem);//获取URL的图片到流
except
Showmessage('网络出错!');
mem.Free;
Exit;
end;
Image1.Picture.Graphic.LoadFromStream(mem);
mem.Free;
Http.Free;
End;Edit2.Text:='http://8ahsdv.5166.info/controls/ImgText.ashx?c=+PfPglYdwJyG/LMWS2YsKA==';此为获取网站验证图片的URL
用浏览器出来的图片确实是bmp位图,而程序的Image1根本没有任何图片显示。
如把流保存到bmp图片(mem.SaveToFile(ExtractFilePath(ParamStr(0))+'\test.bmp')后,再用文件流打开此图片时(MS:=TFileStream.Create(ExtractFilePath(ParamStr(0))+'\test.bmp', fmOpenRead);Image1.Picture.Graphic.LoadFromStream(mem);),则会出现出错信息是为bitmap image is not valid。而用acdsee看此图则可以看到。如何解决,我觉得获取的图片不是纯bmp图,可能前面一些字节有干扰的信息,因此出错。请高手指教!
MS: TFileStream;
mem: TMemoryStream;
Http: TIdHTTP;
rs:string;
Begin
Http := TIdHTTP.Create(self);
mem := TMemoryStream.Create;
try
Http.Get(Edit2.Text,mem);//获取URL的图片到流
except
Showmessage('网络出错!');
mem.Free;
Exit;
end;
Image1.Picture.Graphic.LoadFromStream(mem);
mem.Free;
Http.Free;
End;Edit2.Text:='http://8ahsdv.5166.info/controls/ImgText.ashx?c=+PfPglYdwJyG/LMWS2YsKA==';此为获取网站验证图片的URL
用浏览器出来的图片确实是bmp位图,而程序的Image1根本没有任何图片显示。
如把流保存到bmp图片(mem.SaveToFile(ExtractFilePath(ParamStr(0))+'\test.bmp')后,再用文件流打开此图片时(MS:=TFileStream.Create(ExtractFilePath(ParamStr(0))+'\test.bmp', fmOpenRead);Image1.Picture.Graphic.LoadFromStream(mem);),则会出现出错信息是为bitmap image is not valid。而用acdsee看此图则可以看到。如何解决,我觉得获取的图片不是纯bmp图,可能前面一些字节有干扰的信息,因此出错。请高手指教!
不要那个Graphic了嘛。
直接Image1.Picture.LoadFromStream(mem);
2,这张图片实际上JFIF的,也是jpeg的一类。你用浏览器保存后看到的是经过转化的,但是idhttp是不会给你转化的。
jfif图片存储格式之一,由JPEG格式衍生而来,后缀为".jfif"。
JPEG本身只有描述如何将一个图像转换为字节的数据串流(streaming),但并没有说明这些字节如何在任何特定的储存媒体上被封存起来。一个由独立JPEG小组(Independent JPEG Group)所建立的额外标准,称为JFIF(JPEG File Interchange Format,JPEG档案交换格式),详细说明如何从一个JPEG串流,产出一个适合于电脑储存和传输(像是在因特网上)的档案。当有人称呼一个"JPEG档案",一般而言他是意指一个JFIF档案,或有时候是一个Exif JPEG档案。然而,也有其他以JPEG为基础的档案格式,像是JNG。
JPEG/JFIF是最普遍在万维网(World Wide Web)上被用来储存和传输图片的格式。它并不适合于线条绘图(drawing)和其他文字或图示(iconic)的图形,因为它的压缩方法用在这些图形的型态上,会得到不适当的结果(PNG和GIF格式通常是用来针对这种目的之图形;GIF每一像素只有8位元,并不很适合于用在彩色照片,PNG可以被用来无失真地储存照片,但是档案太大让它不适合在网页上放照片)。
对于JFIF的MIME媒体型态是image/jpeg(定义在RFC 1341)。
jpg.LoadFromStream(mem);
原来是这个问题!多谢lcgboy 的详细指导!再想问问lcgboy :idhttp.HandleRedirects需要设置成为true有咩用啊?