如何将位图转换为byte ?

基本上我使用listviews插入事件插入图像,尝试从fileupload控件调整图像大小,然后使用LINQ将其保存在SQL数据库中。

我找到了一些代码来创建fileupload控件中内容的新位图,但这是将它存储在服务器上的一个文件中,从这个来源 ,但我需要将位图保存回SQL数据库,我认为我需要转换回byte []格式。

那么如何将位图转换为byte []格式?

如果我以错误的方式解决这个问题,我将不胜感激,你可以纠正我。

这是我的代码:

// Find the fileUpload control string filename = uplImage.FileName; // Create a bitmap in memory of the content of the fileUpload control Bitmap originalBMP = new Bitmap(uplImage.FileContent); // Calculate the new image dimensions int origWidth = originalBMP.Width; int origHeight = originalBMP.Height; int sngRatio = origWidth / origHeight; int newWidth = 100; int newHeight = sngRatio * newWidth; // Create a new bitmap which will hold the previous resized bitmap Bitmap newBMP = new Bitmap(originalBMP, newWidth, newHeight); // Create a graphic based on the new bitmap Graphics oGraphics = Graphics.FromImage(newBMP); // Set the properties for the new graphic file oGraphics.SmoothingMode = SmoothingMode.AntiAlias; oGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic; // Draw the new graphic based on the resized bitmap oGraphics.DrawImage(originalBMP, 0, 0, newWidth, newHeight); PHJamesDataContext db = new PHJamesDataContext(); System.IO.MemoryStream stream = new System.IO.MemoryStream(); newBMP.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp); stream.Position = 0; byte[] data = new byte[stream.Length]; PHJProjectPhoto myPhoto = new PHJProjectPhoto { ProjectPhoto = data, OrderDate = DateTime.Now, ProjectPhotoCaption = ProjectPhotoCaptionTextBox.Text, ProjectId = selectedProjectId }; db.PHJProjectPhotos.InsertOnSubmit(myPhoto); db.SubmitChanges(); 

您应该能够将此块更改为

  System.IO.MemoryStream stream = new System.IO.MemoryStream(); newBMP.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp); PHJProjectPhoto myPhoto = new PHJProjectPhoto { ProjectPhoto = stream.ToArray(), // <<--- This will convert your stream to a byte[] OrderDate = DateTime.Now, ProjectPhotoCaption = ProjectPhotoCaptionTextBox.Text, ProjectId = selectedProjectId }; 

如果你已经有了MemoryStream ,只需调用MemoryStream.ToArray即可获取数据。

假设你的位图是bmp

 byte[] data; using(System.IO.MemoryStream stream = new System.IO.MemoryStream()) { bmp.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp); stream.Position = 0; data = new byte[stream.Length]; stream.Read(data, 0, stream.Length); stream.Close(); }