2011-08-30 21 views
7

Bir görüntüyü base64 öğesine ve tekrar resme dönüştürmek istiyorum. Şimdiye kadar denediğim kod ve hata da burada. Herhangi bir öneriniz lütfen?Bir resmi base64'e dönüştürün ve tersi

public void Base64ToImage(string coded) 
{ 
    System.Drawing.Image finalImage; 
    MemoryStream ms = new MemoryStream(); 
    byte[] imageBytes = Convert.FromBase64String(coded); 
    ms.Read(imageBytes, 0, imageBytes.Length); 
    ms.Seek(0, SeekOrigin.Begin); 
    finalImage = System.Drawing.Image.FromStream(ms); 

    Response.ContentType = "image/jpeg"; 
    Response.AppendHeader("Content-Disposition", "attachment; filename=LeftCorner.jpg"); 
    finalImage.Save(Response.OutputStream, ImageFormat.Jpeg); 
} 

hatadır:

Parameter is not valid.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentException: Parameter is not valid.

Source Error:

Line 34:    ms.Read(imageBytes, 0, imageBytes.Length); 
Line 35:    ms.Seek(0, SeekOrigin.Begin); 
Line 36:    finalImage = System.Drawing.Image.FromStream(ms); 
Line 37:   
Line 38:   Response.ContentType = "image/jpeg"; 

Source File: e:\Practice Projects\FaceDetection\Default.aspx.cs Line: 36

cevap

7

için yerine mevcut verileri (imageBytes) akımı içine yükleme daha boş akımından okuma vardır. Deneyin: Ayrıca

byte[] imageBytes = Convert.FromBase64String(coded); 
using(var ms = new MemoryStream(imageBytes)) { 
    finalImage = System.Drawing.Image.FromStream(ms); 
} 

, sen finalImage bertaraf edilmesini temin için çaba; ASP.NET o System.ComponentModel is not supported not nihayet

System.Drawing.Image finalImage = null; 
try { 
    // the existing code that may (or may not) successfully create an image 
    // and assign to finalImage 
} finally { 
    if(finalImage != null) finalImage.Dispose(); 
} 

Ve;: ı önereceğini YMMV.

Caution

Classes within the System.Drawing namespace are not supported for use within a Windows or ASP.NET service. Attempting to use these classes from within one of these application types may produce unexpected problems, such as diminished service performance and run-time exceptions. For a supported alternative, see Windows Imaging Components.

+0

Yine aynı alma satırdaki hata finalImage = System.Drawing.Image.FromStream (ms); –

2

MemoryStream.Read Method belirtilen bayt dizisi MemoryStream bayt okur.

Eğer MemoryStream bayt dizisi yazmak istiyorsanız

MemoryStream.Write Method kullanın: Alternatif

ms.Write(imageBytes, 0, imageBytes.Length); 
ms.Seek(0, SeekOrigin.Begin); 

, sadece bir MemoryStream yılında bayt dizisi sarabilirsiniz:

MemoryStream ms = new MemoryStream(imageBytes); 
+0

Cevabınız için teşekkürler, ama işe yaramadı! Herhangi bir alternatif önerebilir misiniz? –