2016-07-23 12 views
0

Ich habe eine Formularanwendung für extrahiertes Bild erstellt, ich habe viele Beiträge gesucht, bis jetzt kann ich in den MemoryStream (Byte Array) herunterladen. ich nicht in der Lage bin, dass die Byte-Array in Dateisystem zu speichern und die Bildgröße überprüfen ....C# das extrahierte Bild herunterladen

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    public List<string> FetchImages(string Url) 
    { 
     List<string> imageList = new List<string>(); 


     if (!Url.StartsWith("http://") && !Url.StartsWith("https://")) 
      Url = "http://" + Url; 

     string responseUrl = string.Empty; 
     string htmlData = ASCIIEncoding.ASCII.GetString(DownloadData(Url, out responseUrl)); 

     if (responseUrl != string.Empty) 
      Url = responseUrl; 

     if (htmlData != string.Empty) 
     { 
      string imageHtmlCode = "<img"; 
      string imageSrcCode = @"src="""; 

      int index = htmlData.IndexOf(imageHtmlCode); 
      while (index != -1) 
      { 

       htmlData = htmlData.Substring(index); 


       int brackedEnd = htmlData.IndexOf('>'); //make sure data will be inside img tag 
       int start = htmlData.IndexOf(imageSrcCode) + imageSrcCode.Length; 
       int end = htmlData.IndexOf('"', start + 1); 

        if (end > start && start < brackedEnd) 
       { 
        string loc = htmlData.Substring(start, end - start); 

         imageList.Add(loc); 
       } 

        if (imageHtmlCode.Length < htmlData.Length) 
        index = htmlData.IndexOf(imageHtmlCode, imageHtmlCode.Length); 
       else 
        index = -1; 
      } 

       for (int i = 0; i < imageList.Count; i++) 
      { 
       string img = imageList[i]; 

       string baseUrl = GetBaseURL(Url); 

       if ((!img.StartsWith("http://") && !img.StartsWith("https://")) 
        && baseUrl != string.Empty) 
        img = baseUrl + "/" + img.TrimStart('/'); 

       imageList[i] = img; 
      } 
     } 

     return imageList; 
    } 


    private byte[] DownloadData(string Url) 
    { 
     string empty = string.Empty; 
     return DownloadData(Url, out empty); 
    } 

    private byte[] DownloadData(string Url, out string responseUrl) 
    { 
     byte[] downloadedData = new byte[0]; 
     try 
     { 
       WebRequest req = WebRequest.Create(Url); 
      WebResponse response = req.GetResponse(); 
      Stream stream = response.GetResponseStream(); 

      responseUrl = response.ResponseUri.ToString(); 

       byte[] buffer = new byte[1024]; 


      MemoryStream memStream = new MemoryStream(); 
      while (true) 
      { 

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

       if (bytesRead == 0) 
       { 
        break; 
       } 
       else 
       { 

        memStream.Write(buffer, 0, bytesRead); 
       } 
      } 

       downloadedData = memStream.ToArray(); 

       stream.Close(); 
      memStream.Close(); 
     } 
     catch (Exception) 
     { 
      responseUrl = string.Empty; 
      return new byte[0]; 
     } 

     return downloadedData; 
    } 

    private Image ImageFromURL(string Url) 
    { 
     byte[] imageData = DownloadData(Url); 
     Image img = null; 

     try 
     { 
      MemoryStream stream = new MemoryStream(imageData); 
      img = Image.FromStream(stream); 
      stream.Close(); 
     } 
     catch (Exception) 
     { 
     } 

     return img; 
    } 

    private string GetBaseURL(string Url) 
    { 
     int inx = Url.IndexOf("://") + "://".Length; 
     int end = Url.IndexOf('/', inx); 

     string baseUrl = string.Empty; 
     if (end != -1) 
      return Url.Substring(0, end); 
     else 
      return string.Empty; 
    } 

    private void btnGetImages_Click(object sender, EventArgs e) 
    {    
     this.Cursor = Cursors.WaitCursor; 

     listImages.Items.Clear(); 

     foreach (string image in FetchImages(txtURL.Text)) 
     { 
      listImages.Items.Add(image); 
     } 

     this.Cursor = Cursors.Default; 
    } 

    private void btnView_Click(object sender, EventArgs e) 
    { 
     if (listImages.SelectedIndex != -1) 
      picImage.Image = ImageFromURL(listImages.SelectedItem.ToString()); 
    } 

    private void btnSave_Click(object sender, EventArgs e) 
    { 

    } 

    private void btnDownload_Click(object sender, EventArgs e) 
    { 
     DownloadData(txtURL.Text); 
    } 

.. Ich versuche, den memroy Strom in Festplatte zu speichern, aber immer noch nicht genau Code bekommen,

ich denke, dieser Code einige zusätzliche Änderungen benötigt

MemoryStream memStream = new MemoryStream(); 
       while (true) 
       { 
        //Try to read the data 
        int bytesRead = stream.Read(buffer, 0, buffer.Length); 

        if (bytesRead == 0) 
        { 
         break; 
        } 
        else 
        { 
         //Write the downloaded data 
         memStream.Write(buffer, 0, bytesRead); 
        } 
       } 

Jede Hilfe wird

Antwort

1

geschätzt, wenn Sie das Byte [] Array eine speichern möchten Datei,

Syntax: File.WriteAllBytes(string path, byte[] bytes)

ZB: File.WriteAllBytes("Foo.txt", arrBytes); // Requires System.IO

diesen Link verweisen für weitere Informationen http://msdn.microsoft.com/en-us/library/system.io.file.writeallbytes.aspx

Wenn Sie das Byte zurück zum Bild konvertieren möchten und auf das Laufwerk zu speichern. Beispiel:

byte[] bitmap = YourImage(); 

using(Image image = Image.FromStream(new MemoryStream(bitmap))) 
{ 
    image.Save("image.jpg", ImageFormat.Jpeg); 
} 
+0

Was ist "YourImage()"? –

+0

Stellen Sie sich eine Methode vor, die die zu konvertierenden Daten enthält. – Thennarasan

+0

Fehler kommt "Zusätzliche Information: Parameter ist nicht gültig." –