| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1475 人关注过本帖
标题:使用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
快速回复:使用C#下载jpg图片的问题
数据加载中...
 
   



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

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