Inf*_*tus 23 .net vb.net stream
我从Internet上下载了一个图像并转换为String(这是不可更改的)
Dim Request As System.Net.WebRequest = _
System.Net.WebRequest.Create( _
"http://www.google.com/images/nav_logo.png")
Dim WebResponse As System.Net.HttpWebResponse = _
DirectCast(Request.GetResponse(), System.Net.HttpWebResponse)
Dim Stream As New System.IO.StreamReader( _
WebResponse.GetResponseStream, System.Text.Encoding.UTF8)
Dim Text as String = Stream.ReadToEnd
Run Code Online (Sandbox Code Playgroud)
如何将String转换回Stream?
所以我可以使用该流来获取图像.
像这样:
Dim Image As New Drawing.Bitmap(WebResponse.GetResponseStream)
Run Code Online (Sandbox Code Playgroud)
但是现在我只有Text String,所以我需要这样的东西:
Dim Stream as Stream = ReadToStream(Text, System.Text.Encoding.UTF8)
Dim Image As New Drawing.Bitmap(Stream)
Run Code Online (Sandbox Code Playgroud)
编辑:
这个引擎主要用于下载网页,但我也试图用它来下载图像.字符串的格式为UTF8,如示例代码中所示...
我试过使用了MemoryStream(Encoding.UTF8.GetBytes(Text)),但是在将流加载到图像时遇到了这个错误:
GDI +中发生了一般错误.
什么在转换中迷失了?
Mar*_*ell 40
为什么要将二进制(图像)数据转换为字符串?没有意义......除非你使用base-64?
无论如何,为了扭转你所做的,你可以尝试使用new MemoryStream(Encoding.UTF8.GetBytes(text))?
这将创建一个用字符串填充的新MemoryStream(通过UTF8).就个人而言,我怀疑它会起作用 - 你会遇到很多编码问题,将原始二进制文件视为UTF8数据...我希望读取或写入(或两者)抛出异常.
(编辑)
我应该补充说使用base-64,只需将数据作为a byte[],然后调用Convert.ToBase64String(...); 并获取数组,只需使用Convert.FromBase64String(...).
重新编辑,这正是我试图警告的内容......在.NET中,字符串不仅仅是a byte[],所以你不能简单地用二进制图像数据填充它.许多数据根本不会对编码有意义,因此可能会被悄悄地丢弃(或抛出异常).
要将原始二进制文件(如图像)作为字符串处理,您需要使用base-64编码; 然而,这会增加尺寸.请注意,这WebClient可能会使这更简单,因为它byte[]直接公开功能:
using(WebClient wc = new WebClient()) {
byte[] raw = wc.DownloadData("http://www.google.com/images/nav_logo.png")
//...
}
Run Code Online (Sandbox Code Playgroud)
无论如何,使用标准Stream方法,这里是如何编码和解码base-64:
// ENCODE
// where "s" is our original stream
string base64;
// first I need the data as a byte[]; I'll use
// MemoryStream, as a convenience; if you already
// have the byte[] you can skip this
using (MemoryStream ms = new MemoryStream())
{
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = s.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, bytesRead);
}
base64 = Convert.ToBase64String(ms.GetBuffer(), 0, (int) ms.Length);
}
// DECODE
byte[] raw = Convert.FromBase64String(base64);
using (MemoryStream decoded = new MemoryStream(raw))
{
// "decoded" now primed with the binary
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
61372 次 |
| 最近记录: |