2011-01-08 6 views
2

Ich verwende ein ASP.NET-Steuerelement zum Hochladen von Dateien, verkleinere dann ein Bild und speichert das neue Bild in einem neuen Bitmap. Hier ist der Code, den ich bisher habe:Hilfe beim Abrufen von Daten aus skalierten Bildern

protected void ResizeImage() 
    { 
     Bitmap originalBMP = new Bitmap(FileUpload1.FileContent); 
     //Calculate new image dimensions 
     int origWidth = originalBMP.Width; 
     int origHeight = originalBMP.Height; 
     int sngRatio = origWidth/origHeight; 
     int newWidth = 100; 
     int newHeight = newWidth/sngRatio; 
     Bitmap newBMP = new Bitmap(originalBMP, newWidth, newHeight); 
} 

ich direkt zu Amazon S3 hochladen und ich brauche einige Daten zu seiner Upload-Methode übergeben. Wie erhalte ich die folgenden Informationen von meinem neuen Bitmap, die ich mit dem Fileupload verwendet haben ?:

FileUpload1.FileBytes 
FileUpload1.FileBytes.Length 

Muss ich meine neue Bitmap in einen Stream speichern, so dass ich ein Array von Bytes bekommen?

+0

Mit dem Bitmap-Konstruktor erhalten Sie extrem schlechte Bildqualität mit vielen Artefakten. Außerdem hoffe ich, dass Sie die using() - Klausel für beide Bitmap-Instanzen verwenden, da der Code den Server bei 20-100 Anfragen zum Absturz bringt. Ich schlage vor, dass Sie stattdessen [eine Bibliothek verwenden, die für die server-sichere Bildgrößenanpassung entwickelt wurde] (http://imageresizing.net), es ist einfacher als die [29 Fallen auf eigene Faust] zu umgehen (http://nathanaeljones.com/163/ 20-Bild-Größenänderung-Fallstricke /). –

Antwort

2

Sie müssen ein MemoryStream erstellen und Bitmap.Save dazu aufrufen.

Sie können dann MemoryStream.ToArray() anrufen.

+0

Perfekt. Vielen Dank. –