Как преобразовать байтовый массив jpg в изображение и отобразить в картинке? - PullRequest
0 голосов
/ 23 сентября 2018

Я новичок в моно программировании на C # в raspbian os (pi3 b).Я взял пример кода для приложения сканера отпечатков пальцев в C # mono из этой ссылки github , сейчас я запускаю то же приложение в Raspbian os под платой pi3 b.

Теперь после сканированияпользовательское изображение пальца, я хочу отобразить его в Winform PictureBox.

после того, как приложение отсканирует каждый палец, затем оно отправит байт [] в пользовательский интерфейс, используя метод обратного вызова ниже.

private void FingerPrintlib_OnEnrollImageResult(byte[] enrollImage, int count)
    {
        //lblinstruction.Invoke((MethodInvoker)delegate
        //{
        //    lblinstruction.Visible = false;
        //});

        if (count == 0)
        {
            pictureBox4.Invoke((MethodInvoker)delegate
            {
                //pictureBox4.Image = byteArrayToImage(enrollImage);
                pictureBox4.SizeMode = PictureBoxSizeMode.StretchImage;
            });
        }
        else
        {
            pictureBox5.Invoke((MethodInvoker)delegate
            {
                //pictureBox5.Image = byteArrayToImage(enrollImage);
                pictureBox5.SizeMode = PictureBoxSizeMode.StretchImage;
            });
        }
    }

Я новичок в моно программировании на C # в raspbian os (pi3 b).Я написал приложение для сканирования отпечатков пальцев на C # и, используя моно, запускаю то же самое приложение в Raspbian os под платой pi3.

Теперь после сканирования изображения пальца пользователя я хочу отобразить его в PictureBox.

как только библиотека сканирует каждый палец, она отправляет байт [] в пользовательский интерфейс, используя метод обратного вызова ниже.

private void FingerPrintlib_OnEnrollImageResult(byte[] enrollImage, int count)
{
    //lblinstruction.Invoke((MethodInvoker)delegate
    //{
    //    lblinstruction.Visible = false;
    //});

    if (count == 0)
    {
        pictureBox4.Invoke((MethodInvoker)delegate
        {
            //pictureBox4.Image = byteArrayToImage(enrollImage);
            pictureBox4.SizeMode = PictureBoxSizeMode.StretchImage;
        });
    }
    else
    {
        pictureBox5.Invoke((MethodInvoker)delegate
        {
            //pictureBox5.Image = byteArrayToImage(enrollImage);
            pictureBox5.SizeMode = PictureBoxSizeMode.StretchImage;
        });
    }
}


 Image byteArrayToImage(byte[] byteArrayIn) 
{
 try { MemoryStream ms = new MemoryStream(byteArrayIn); 
Image returnImage = Image.FromStream(ms); 
return returnImage;
 } 
catch (Exception ex)
 { 
   MessageBox.Show(ex.Message); 
 } 
   return null; 
}

, когда я выполняю приведенный выше код, я получаю исключение, подобное

Обнаружена нулевая ссылка или недопустимое значение [GDI + status: InvalidParameter]

, как я могу решить эту проблему и отобразить файл изображения в своем приложении?

Спасибо

1 Ответ

0 голосов
/ 23 сентября 2018

Приведенный ниже код работает просто отлично:

using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;

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

    private void Form1_Load(object sender, EventArgs e)
    {
      byte[] data = File.ReadAllBytes("test.jpg");
      this.pictureBox1.Image = GetImage(data);
    }

    private static Image GetImage(byte[] data)
    {
      using (MemoryStream ms = new MemoryStream(data))
      {
        return (Image.FromStream(ms));
      }
    }
  }
}

Новый проект формы Windows, добавление графического блока в форму, копирование файла test.jpg в каталог Debug и использование кода выше.Нет проблем.Изображение загружено.

...