获取网上图片转换二进制问题,图片只显示一半 马上揭帖

Reasoncool 2007-10-29 02:30:01
protected void Page_Load(object sender, EventArgs e)
{

Response.ContentType = "image/jpeg";
Response.BinaryWrite(GetImageByte("http://cimg2.163.com/cnews/2007/10/29/200710290837338486c.jpg"));
}

/// <summary >
///图片二进制转换
/// </summary >
private byte[] GetImageByte(string Url)
{
WebResponse response = null;
Stream stream = null;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);

response = request.GetResponse();
stream = response.GetResponseStream();

byte[] buffer = new byte[response.ContentLength];

stream.Read(buffer, 0, buffer.Length);
stream.Close();
return buffer;

}
原图:

可我程序输出的图片确实一半,如图:
...全文
912 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
o123o567o 2010-08-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lazyfish 的回复:]
int count = response.ContentLength;
byte[] buffer = new byte[count];
int offset = 0;
while (count > 0){
int n = stream.Read(buffer, offset , count );
[/Quote]
此处有问题,修改后不能全部读取字节流
o123o567o 2010-08-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 it_mpf 的回复:]
protected void Page_Load(object sender, EventArgs e)
{
Response.ContentType = "image/jpeg";
Response.BinaryWrite(GetImageByte("http://cimg2.163.com/cnews/2007/10/29/200710290837338486c.jpg"))……
[/Quote]

这个比较好
Reasoncool 2007-10-30
  • 打赏
  • 举报
回复
方法三:
private byte[] GetImageByte(string Url)
{
WebResponse response = null;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);

response = request.GetResponse();
BinaryReader reader = new BinaryReader(
response.GetResponseStream());

// huge memory buffer (512k), we don't know final size!
MemoryStream memoryStream= new MemoryStream(0x080000);

int readLen = 0;
byte[] chunk = new byte[0x000400];
byte[] bufferedData = null;

// read from stream until EOF
while ((readLen = reader.Read(chunk, 0, chunk.Length)) > 0)
{
// write to memory stream
memoryStream.Write(chunk, 0, readLen);
}

// get final data
bufferedData = memoryStream.ToArray();

// clean up
memoryStream.Dispose();

return bufferedData;
}
没人告诉我 错在哪里:(
Reasoncool 2007-10-29
  • 打赏
  • 举报
回复
LL223851 同样感谢你 现在有两种方法都能实现 分别由jinjazz和it_mpf提供 再次多谢

哪位能说一下两个方法哪个更好? 不要嫌我烦
方法一:
private byte[] GetImageByte(string Url)
{
WebClient wb = new WebClient();
return wb.DownloadData(Url);
}

方法二:
private byte[] GetImageByte(string Url)
{
WebResponse response = null;
System.IO.Stream stream = null;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);

response = request.GetResponse();

stream = response.GetResponseStream();

MemoryStream ms = new MemoryStream();

byte[] buffer = new byte[256];

int c = stream.Read(buffer, 0, buffer.Length);


while (c > 0)
{
ms.Write(buffer, 0, c);
c = stream.Read(buffer, 0, buffer.Length);
}
stream.Close();
return ms.ToArray();
}

Reasoncool 2007-10-29
  • 打赏
  • 举报
回复
lazyfish呆呆虫


WebResponse response = null;
Stream stream = null;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
response = request.GetResponse();
stream = response.GetResponseStream();
long count = response.ContentLength;
byte[] buffer = new byte[count];
int offset = 0;
int n;
while (count > 0)
{
n = stream.Read(buffer, offset, int.Parse(count.ToString()));
if (n == 0) break;
offset = +n;
count = -n;
}

stream.Close();
return buffer;

的方法读出来 还是半截 和我的那个半截图一抹一样
LL223851 2007-10-29
  • 打赏
  • 举报
回复
我真晕,还以为是在winform里面显示呢,哈哈,没有认真看清楼主的意思,哈哈
LL223851 2007-10-29
  • 打赏
  • 举报
回复
        private void Form1_Load(object sender, EventArgs e)
{
GetImg();
}

private void GetImg()
{
try
{
Uri myImgUri;
myImgUri = new Uri("http://cimg2.163.com/cnews/2007/10/29/200710290837338486c.jpg");
WebRequest webRequest = WebRequest.Create(myImgUri);
WebResponse webResponse = webRequest.GetResponse();
Bitmap myImage = new Bitmap(webResponse.GetResponseStream());
this.pictureBox1.Image = (Image)myImage;
}
catch
{
return;
}
}


LL223851 2007-10-29
  • 打赏
  • 举报
回复
        private void Form1_Load(object sender, EventArgs e)
{
GetImg();
}

private void GetImg()
{
try
{
Uri myImgUri;
myImgUri = new Uri("http://cimg2.163.com/cnews/2007/10/29/200710290837338486c.jpg");
WebRequest webRequest = WebRequest.Create(myImgUri);
WebResponse webResponse = webRequest.GetResponse();
Bitmap myImage = new Bitmap(webResponse.GetResponseStream());
this.pictureBox1.Image = (Image)myImage;
}
catch
{
return;
}
}


Reasoncool 2007-10-29
  • 打赏
  • 举报
回复
LL223851


我的目的是得到完整的二进制数据
LL223851 2007-10-29
  • 打赏
  • 举报
回复
        private void GetImg(Uri myImgUri)
{
try
{
myImgUri = new Uri("http://cimg2.163.com/cnews/2007/10/29/200710290837338486c.jpg");
WebRequest webRequest = WebRequest.Create(myImgUri);
WebResponse webResponse = webRequest.GetResponse();
Bitmap myImage = new Bitmap(webResponse.GetResponseStream());
this.picture.Image = (Image)myImage;
}
catch
{
return;
}
}


test this one
it_mpf 2007-10-29
  • 打赏
  • 举报
回复
CSDN搞什么啊,我发一下怎么会是三篇~~~
Reasoncool 2007-10-29
  • 打赏
  • 举报
回复
private byte[] GetImageByte(string Url)
{
WebClient wb = new WebClient();
return wb.DownloadData(Url);
}

这样保证读完不?
lazyfish 2007-10-29
  • 打赏
  • 举报
回复
private byte[] GetImageByte(string Url)
{
WebResponse response = null;
Stream stream = null;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);

response = request.GetResponse();

stream = response.GetResponseStream();


int count = response.ContentLength;
byte[] buffer = new byte[count];
int offset = 0;
while (count > 0){
int n = stream.Read(buffer, offset , count );
if (n == 0) break;
offset =+ n;
count =- n;
}

stream.Close();
return buffer;

}



it_mpf 2007-10-29
  • 打赏
  • 举报
回复
protected void Page_Load(object sender, EventArgs e)
{
Response.ContentType = "image/jpeg";
Response.BinaryWrite(GetImageByte("http://cimg2.163.com/cnews/2007/10/29/200710290837338486c.jpg"));
}

private byte[] GetImageByte(string Url)
{
WebResponse response = null;
System.IO.Stream stream = null;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);

response = request.GetResponse();

stream = response.GetResponseStream();

MemoryStream ms = new MemoryStream();

byte[] buffer = new byte[256];

int c = stream.Read(buffer, 0, buffer.Length);



while (c > 0)
{
ms.Write(buffer, 0, c);
c = stream.Read(buffer, 0, buffer.Length);
}
stream.Close();
return ms.ToArray();
}


这样写.... 这样写能保证图片被读完~~~~
it_mpf 2007-10-29
  • 打赏
  • 举报
回复
protected void Page_Load(object sender, EventArgs e)
{
Response.ContentType = "image/jpeg";
Response.BinaryWrite(GetImageByte("http://cimg2.163.com/cnews/2007/10/29/200710290837338486c.jpg"));
}

private byte[] GetImageByte(string Url)
{
WebResponse response = null;
System.IO.Stream stream = null;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);

response = request.GetResponse();

stream = response.GetResponseStream();

MemoryStream ms = new MemoryStream();

byte[] buffer = new byte[256];

int c = stream.Read(buffer, 0, buffer.Length);



while (c > 0)
{
ms.Write(buffer, 0, c);
c = stream.Read(buffer, 0, buffer.Length);
}
stream.Close();
return ms.ToArray();
}


这样写.... 这样写能保证图片被读完~~~~
it_mpf 2007-10-29
  • 打赏
  • 举报
回复
protected void Page_Load(object sender, EventArgs e)
{
Response.ContentType = "image/jpeg";
Response.BinaryWrite(GetImageByte("http://cimg2.163.com/cnews/2007/10/29/200710290837338486c.jpg"));
}

private byte[] GetImageByte(string Url)
{
WebResponse response = null;
System.IO.Stream stream = null;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);

response = request.GetResponse();

stream = response.GetResponseStream();

MemoryStream ms = new MemoryStream();

byte[] buffer = new byte[256];

int c = stream.Read(buffer, 0, buffer.Length);



while (c > 0)
{
ms.Write(buffer, 0, c);
c = stream.Read(buffer, 0, buffer.Length);
}
stream.Close();
return ms.ToArray();
}


这样写.... 这样写能保证图片被读完~~~~
Reasoncool 2007-10-29
  • 打赏
  • 举报
回复
up
Reasoncool 2007-10-29
  • 打赏
  • 举报
回复
那个帖子 我已经结帖 jinjazz 可以指出我的错误吗 请不吝赐教 谢谢了
Reasoncool 2007-10-29
  • 打赏
  • 举报
回复
lazyfish 的方法 未通过
byte[] buffer = new byte[lengthA];
lengthA未定义


jinjazz 的方法很好 我现在还是不太明白我的方法有可以实现的方式吗
jinjazz 2007-10-29
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20071029/14/bb8bd294-ba20-4067-b424-73658a994a2f.html
private byte[] GetImageByte(string Url) 
{
WebClient wb = new WebClient();
return wb.DownloadData(Url);
}
加载更多回复(2)

62,242

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧