powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Помогите.Byte[] to bitmap - invalid parameter
8 сообщений из 8, страница 1 из 1
Помогите.Byte[] to bitmap - invalid parameter
    #39473706
bssoft2b
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никак не могу совладать с этой ошибкой. Перерыл весь стековерфло, попробовал нескоько вариантов, не помогает.
Последний вариант

byte[2048] RegTmp;
var ms1 = new MemoryStream(RegTmp);
ms1.Seek(0, SeekOrigin.Begin);
var bmp1 = Image.FromStream(ms1); <-- ошибка возникает здесь


Не подскажете - что делать?
...
Рейтинг: 0 / 0
Помогите.Byte[] to bitmap - invalid parameter
    #39473709
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bssoft2b,

сначала надо в ms1 что нибудь положить. нет там кролика
...
Рейтинг: 0 / 0
Помогите.Byte[] to bitmap - invalid parameter
    #39473712
bssoft2b
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Siemarglbssoft2b,

сначала надо в ms1 что нибудь положить. нет там кролика
Уверяю - RegTmp - полный, я просто не весь код привел.
...
Рейтинг: 0 / 0
Помогите.Byte[] to bitmap - invalid parameter
    #39473715
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bssoft2b,

так приводи. под теги кода src и спойлера если много.
и текст ошибки.

телепатов мало
...
Рейтинг: 0 / 0
Помогите.Byte[] to bitmap - invalid parameter
    #39473719
bssoft2b
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Siemarglbssoft2b,

так приводи. под теги кода src и спойлера если много.
и текст ошибки.

телепатов мало

Наслаждайтесь , место ошибки(Parameter is not valid) выделено красным:
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;
using FingerPrintRec.FingerPrintService;
using libzkfpcsharp;
using Sample;

namespace Demo
{
public partial class Form1 : Form
{
private const int REGISTER_FINGER_COUNT = 3;

private const int MESSAGE_CAPTURED_OK = 0x0400 + 6;
private readonly byte[] CapTmp = new byte[2048];
private readonly zkfp fpInstance = new zkfp();
private readonly byte[] RegTmp = new byte[2048];

private readonly byte[][] RegTmps = new byte[3][];
private bool bIdentify = true;
private bool bIsTimeToDie;
private int cbCapTmp = 2048;
private int cbRegTmp;
private IntPtr FormHandle = IntPtr.Zero;
private byte[] FPBuffer;
private int iFid = 1;
private bool IsRegister;
private int RegisterCount;

public Form1()
{
InitializeComponent();
InitDevice();
OpenDevice();
}

[DllImport("user32.dll", EntryPoint = "SendMessageA")]
public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);

public void InitDevice()
{
var ret = zkfp.ZKFP_ERR_OK;
if ((ret = fpInstance.Initialize()) == zkfp.ZKFP_ERR_OK)
{
var nCount = fpInstance.GetDeviceCount();
if (nCount > 0)
{
}
else
{
fpInstance.Finalize();
MessageBox.Show("Устройство не присоединено!");
}
}
else
{
MessageBox.Show("Ошибка инициализации, код==" + ret + " !");
}
}

private void Finalize()
{
fpInstance.Finalize();
cbRegTmp = 0;
}

public void OpenDevice()
{
var ret = zkfp.ZKFP_ERR_OK;
if (zkfp.ZKFP_ERR_OK != (ret = fpInstance.OpenDevice(0)))
{
MessageBox.Show("Устройство не открылось, код = " + ret);
return;
}
RegisterCount = 0;
cbRegTmp = 0;
iFid = 1;
for (var i = 0; i < 3; i++)
RegTmps[i] = new byte[2048];
FPBuffer = new byte[fpInstance.imageWidth * fpInstance.imageHeight];

var captureThread = new Thread(DoCapture);
captureThread.IsBackground = true;
captureThread.Start();
bIsTimeToDie = false;
textRes.Text = "Устройство открылось, с/н=" + fpInstance.devSn;
}

private void DoCapture()
{
while (!bIsTimeToDie)
{
cbCapTmp = 2048;
var ret = fpInstance.AcquireFingerprint(FPBuffer, CapTmp, ref cbCapTmp);
if (ret == zkfp.ZKFP_ERR_OK)
SendMessage(FormHandle, MESSAGE_CAPTURED_OK, IntPtr.Zero, IntPtr.Zero);
Thread.Sleep(200);
}
}

protected override void DefWndProc(ref Message m)
{
switch (m.Msg)
{
case MESSAGE_CAPTURED_OK:
{
var ms = new MemoryStream();
BitmapFormat.GetBitmap(FPBuffer, fpInstance.imageWidth, fpInstance.imageHeight, ref ms);
var bmp = new Bitmap(ms);
picFPImg.Image = bmp;

if (IsRegister)
{
var ret = zkfp.ZKFP_ERR_OK;
int fid = 0, score = 0;
ret = fpInstance.Identify(CapTmp, ref fid, ref score);
if (zkfp.ZKFP_ERR_OK == ret)
{
textRes.Text = "Этот отпечаток уже зарегистрирован в системе id=" + fid + "!";
return;
}
if (RegisterCount > 0 && fpInstance.Match(CapTmp, RegTmps[RegisterCount - 1]) <= 0)
{
textRes.Text = "Приложите один и тот же палец 3 раза для формирования отпечатка";
return;
}
Array.Copy(CapTmp, RegTmps[RegisterCount], cbCapTmp);
RegisterCount++;
if (RegisterCount >= REGISTER_FINGER_COUNT)
{
RegisterCount = 0;
if (zkfp.ZKFP_ERR_OK == (ret =
fpInstance.GenerateRegTemplate(RegTmps[0], RegTmps[1], RegTmps[2], RegTmp,
ref cbRegTmp)) &&
zkfp.ZKFP_ERR_OK == (ret = fpInstance.AddRegTemplate(iFid, RegTmp)))
{
iFid++;
textRes.Text = "Регистрация отпечатка успешно завершена";
//отправим отпечаток на сервер
ms = new MemoryStream(RegTmp);
System.Drawing.Image image = Image.FromStream(ms);

using (var svc = new FingerPrintServiceClient())
{
//svc.CreateFeature(bmp1,txtTabNum.Text);
}
}
else
{
textRes.Text = "Регистрация отпечатка неуспешна, код ошибки=" + ret;
}
IsRegister = false;
}
else
{
textRes.Text = "Вы должны приложить палец в " + (REGISTER_FINGER_COUNT - RegisterCount) +
" раз";
}
}
else
{
if (cbRegTmp <= 0)
{
textRes.Text = "Сперва зарегистрируйте отпечатки!";
return;
}
if (bIdentify)
{
var ret = zkfp.ZKFP_ERR_OK;
int fid = 0, score = 0;
ret = fpInstance.Identify(CapTmp, ref fid, ref score);
if (zkfp.ZKFP_ERR_OK == ret)
textRes.Text = "Идентификация успешна, fid= " + fid + ", результат=" + score + "!";
else
textRes.Text = "Идентификация неуспешна, ret= " + ret;
}
else
{
var ret = fpInstance.Match(CapTmp, RegTmp);
if (0 < ret)
textRes.Text = "Отпечаток найден, score=" + ret + "!";
else
textRes.Text = "Отпечаток не найден, ret= " + ret;
}
}
}
break;

default:
base.DefWndProc(ref m);
break;
}
}

private void Form1_Load(object sender, EventArgs e)
{
FormHandle = Handle;
}

private void CloseDevice()
{
bIsTimeToDie = true;
RegisterCount = 0;
Thread.Sleep(1000);
fpInstance.CloseDevice();
}

private void Enroll()
{
if (!IsRegister)
{
IsRegister = true;
RegisterCount = 0;
cbRegTmp = 0;
textRes.Text = "Прижмите палец 3 раза для формирования отпечатка!";
}
}

private void Identify()
{
if (!bIdentify)
{
bIdentify = true;
textRes.Text = "Прижмите палец!";
}
}

private void Verify()
{
if (bIdentify)
{
bIdentify = false;
textRes.Text = "Прижмите палец!";
}
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
CloseDevice();
Finalize();
}


private void btnEnroll_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txtTabNum.Text))
{
textRes.Text = "Заполните табельный номер";
return;
}
Enroll();
}

private void btnIdentify_Click(object sender, EventArgs e)
{
var files = Directory.GetFiles(@"D:\project\fortcross\FingerPrintRec\FingerImages");
var i = 1;
foreach (var file in files)
{
var img = Image.FromFile(file);
using (var ms = new MemoryStream())
{
img.Save(ms, ImageFormat.Jpeg);
var imgArray = ms.ToArray();
Array.Copy(imgArray, RegTmp, cbCapTmp);
}
var ret = fpInstance.AddRegTemplate(i, RegTmp);
}
}
}
}
...
Рейтинг: 0 / 0
Помогите.Byte[] to bitmap - invalid parameter
    #39473741
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>bssoft2b, сегодня, 00:15 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1263383&msg=20572477] [20572477]
>Не подскажете - что делать?

Посмотри здесь .

С уважением,
Владимир
...
Рейтинг: 0 / 0
Помогите.Byte[] to bitmap - invalid parameter
    #39473750
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите.Byte[] to bitmap - invalid parameter
    #39473753
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bssoft2b,

ошибка означает неверный формат данных изображения в буфере.

кстати, на c# структура приложение другая, нежели на С - defwindowproc переопределять не нужно - есть готовые события и их обработчики

вызов
Код: c#
1.
2.
3.
4.
if (zkfp.ZKFP_ERR_OK == (ret =
fpInstance.GenerateRegTemplate(RegTmps[0], RegTmps[1], RegTmps[2], RegTmp,
ref cbRegTmp)) &&
zkfp.ZKFP_ERR_OK == (ret = fpInstance.AddRegTemplate(iFid, RegTmp)))

выглядит подозрительным - два раза подряд RegTmp параметром
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Помогите.Byte[] to bitmap - invalid parameter
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]