Я пытаюсь получить изображение по URL, но когда я сохраняю его в файл, оно составляет половину реального изображения! Я искал много сайтов и решений, таких как HttpWebRequest.BeginGetResponse, потому что я думал, что это потому, что я должен буферизовать данные, но это не сработало. Я не знаю, какая часть моего кода неправильная и создает эту проблему!: (
Это код, который извлекает изображение из URL:
public static Bitmap GetImageFromUrl(string url)
{
string RefererUrl = string.Empty;
int TimeoutMs = 22 * 1000;
string requestAccept = "*/*";
string UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7";
Bitmap img = null;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.UserAgent = UserAgent;
request.Timeout = TimeoutMs;
request.ReadWriteTimeout = TimeoutMs * 6;
request.Accept = requestAccept;
if (!string.IsNullOrEmpty(RefererUrl))
{
request.Referer = RefererUrl;
}
try
{
WebResponse wResponse = request.GetResponse();
using (HttpWebResponse response = wResponse as HttpWebResponse)
{
Stream responseStream = response.GetResponseStream();
img = new Bitmap(responseStream);
response.Close();
}
}
catch (Exception)
{
}
return img;
}
Это код, который сохраняет изображение в файл:
byte[] imgBytes = tile.Image;
using (MemoryStream ms = new MemoryStream(imgBytes))
{
using (Image img = Image.FromStream(ms))
{
ms.Dispose();
Bitmap tempBmp = new Bitmap(img);
img.Dispose();
string activeDir = Environment.CurrentDirectory;
string newPath = System.IO.Path.Combine(activeDir, "Images");
System.IO.Directory.CreateDirectory(newPath);
newPath = System.IO.Path.Combine(newPath, tile.TileType.ToString());
System.IO.Directory.CreateDirectory(newPath);
newPath = System.IO.Path.Combine(newPath, tile.Zoom.ToString());
System.IO.Directory.CreateDirectory(newPath);
newPath = System.IO.Path.Combine(newPath, tile.X.ToString());
System.IO.Directory.CreateDirectory(newPath);
newPath = System.IO.Path.Combine(newPath, tile.Y.ToString());
System.IO.Directory.CreateDirectory(newPath);
string newFileName = "tile.png";
newPath = System.IO.Path.Combine(newPath, newFileName);
tempBmp.Save(newPath, ImageFormat.Png);
tempBmp.Dispose();