标题:使用C#下载jpg图片的问题
只看楼主
slny
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-7-16
 问题点数:0 回复次数:3 
使用C#下载jpg图片的问题
我使用C#从网站下载图片,能够下载到电脑,但是图片会变形变色。请问这时是怎么回事呢?还有我把缓冲区设置成64(byte[] buffer = new byte[64];)时和设置成1024时图片的颜色变化不一样,附件是我下载到的图片,第一个图片是使用1024的缓冲区下载的,第二张是用64的缓冲区下的。下面是我的代码

 private void button1_Click(object sender, EventArgs e)
        {
            string url = "http://st.blog.
            string LocalPath = @"E:\imagedownload\1.jpg";
            try
            {
                Uri u = new Uri(url);
                HttpWebRequest mRequest = (HttpWebRequest)WebRequest.Create(u);
                mRequest.Method = "GET";
                mRequest.ContentType = "application/x-www-form-urlencoded";
                HttpWebResponse wr = (HttpWebResponse)mRequest.GetResponse();
                Stream sIn = wr.GetResponseStream();
                FileStream fs = new FileStream(LocalPath, FileMode.OpenOrCreate, FileAccess.Write);

                long length = wr.ContentLength;
                long i = 0;
                decimal j = 0;
               
                while (i < length)
                {
                    byte[] buffer = new byte[1024];
                    i += sIn.Read(buffer, 0, buffer.Length);
                    fs.Write(buffer, 0, buffer.Length);
                }

                sIn.Close();
                wr.Close();
                fs.Close();
                MessageBox.Show("下载完成!");
            }
            catch(Exception ex)
            {
                MessageBox.Show("错了  "+ex.ToString());
            }


        }

[[it] 本帖最后由 slny 于 2008-11-28 14:59 编辑 [/it]]

1.jpg (31 KB)


1.jpg (31 KB)
搜索更多相关主题的帖子: jpg 
2008-11-28 14:56
slny
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-7-16
得分:0 
自己顶一下,希望能有高手帮解释一下。
2008-11-29 11:21
铲铲
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:506
专家分:0
注 册:2006-5-2
得分:0 
把 fs.Write(buffer, 0, buffer.Length);
改为
fs.Write(buffer, 0, i);

将缓冲区的内容写入流,慎用缓冲区总长作为其写边界,将可能会引入其他未知数据。
应适用真正读取到的内容长度作为写入长度

铲铲是也
2008-11-29 13:17
slny
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-7-16
得分:0 
已经解决了。只须在下面的代码中修改就OK了
long length = wr.ContentLength;
                long i = 0;
                int k = 0;
                while (i < length)
                {
                    byte[] buffer = new byte[1024];
                    k= sIn.Read(buffer, 0, buffer.Length);
                    i = i + k;
                    fs.Write(buffer, 0, k);
                 }
谢谢铲铲版主大人!
2008-12-01 10:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-246735-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.082439 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved