将BitmapImage字节数组转换为Image字节数组(WinRT - > WinForms)

时间:2015-02-27 19:30:07

标签: c# mysql image winforms winrt-xaml

我在这个项目中有2个解决方案。 Windows窗体解决方案和Windows 8.1 Tablet项目。 这就是应该发生的事情:

  1. 用户使用平板电脑拍照,并以字节数组的形式将其上传到MySQL数据库。
  2. 用户启动Windows窗体应用程序并从MySQL数据库加载字节数组。
  3. 然后将字节数组转换为放置在图片框中的图像。
  4. 我像这样存储字节数组:

    CameraCaptureUI dialog = new CameraCaptureUI();
            dialog.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Jpeg;
            Size aspectRatio = new Size(16, 9);
            dialog.PhotoSettings.CroppedAspectRatio = aspectRatio;
    
            StorageFile file = await dialog.CaptureFileAsync(CameraCaptureUIMode.Photo);
            if (file != null)
            {
                BitmapImage bitmapImage = new BitmapImage();
                using (IRandomAccessStream fileStream = await file.OpenAsync(FileAccessMode.Read))
                {
                    var readStream = fileStream.AsStreamForRead();
                    byte[] pixeBuffer = new byte[readStream.Length];
                    await readStream.ReadAsync(pixeBuffer, 0, pixeBuffer.Length);
    
                }
    

    字节数组已成功存储在我的数据库中。

    我在将字节数组转换为WinForms图像时遇到了问题。 这是我的代码:

    using (var ms = new MemoryStream(bytes))
                    {
                        Image i = Image.FromStream(ms);
                        return i;
                    }
    

    这给了我一个无效的参数异常。

    我猜这是图片格式的东西吗?我对溪流真的很陌生,所以我不知道。

    欢迎任何帮助!

    PS:我知道存储在SQL数据库中运行得很好,因为我只能使用WinForms应用程序完美地存储和加载图像。

2 个答案:

答案 0 :(得分:0)

在尝试创建Image ...之前,您是否尝试将MemoryStream的位置设置回到开头...

ms.Seek(0, SeekOrigin.Begin);

答案 1 :(得分:0)

import java.io.*;
import java.sql.Date;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class PageHitCounter extends HttpServlet{

private int hitCount; 

public void init() 
{ 
 // Reset hit counter.
 hitCount = 0;
 } 

public void doGet(HttpServletRequest request,
                HttpServletResponse response)
        throws ServletException, IOException
 {
  // Set response content type
  response.setContentType("text/html");
  // This method executes whenever the servlet is hit 
  // increment hitCount 
  hitCount++; 
  PrintWriter out = response.getWriter();
  String title = "Total Number of Hits";
  String docType =
  "<!doctype html public \"-//w3c//dtd html 4.0 " +
  "transitional//en\">\n";
  out.println(docType +
    "<html>\n" +
    "<head><title>" + title + "</title></head>\n" +
    "<body bgcolor=\"#f0f0f0\">\n" +
    "<h1 align=\"center\">" + title + "</h1>\n" +
    "<h2 align=\"center\">" + hitCount + "</h2>\n" +
    "</body></html>");

  }
   public void destroy() 
  { 
  // This is optional step but if you like you
  // can write hitCount value in your database.
  } 
  } 

试试吧,
它和我一起工作