2015-11-05 6 views
-1

Я работаю с модулем отпечатков пальцев и могу записывать и отображать вывод в окне изображения (C#). Теперь picture.Image имеет значение null, хотя картинка показывает изображение. Поэтому я пытаюсь сохранить изображение в виде bmp, а затем назначить этот BMP для одного и того же изображения, чтобы Picturebox.image не был нулевым.Преобразование изображения PictureBox в bitmap

Вот код:

Bitmap bmp = new Bitmap(picFP.width, picFP.height); 
picFP.DrawToBitmap(bmp, picFP.ClientRectangle); 

bmp.Save("path", Imageformat.bmp); 
picFP.image = bmp; 

Здесь растровое изображение, сохраненное пустым. В чем проблема?

+0

Как вы снимаете и показываете вывод в окне изображения? – jhmt

+0

Я использую Nitgen SDK, и я могу захватить вывод отпечатка пальца и отобразить его в окне изображения. DrawToBitmap() дает мне пустой растровый образ – LDin

+0

У меня нет опыта работы с Nitgen SDK, но этот вопрос (http://stackoverflow.com/questions/14182487/windowsform-picturebox-image-is-null-even-though- theres-a-image-shown-in-the-f) может быть вам полезна. – jhmt

ответ

1

PictureBox имеет три слоя он может отображать и PictureBox.DrawToBitmap поставит все три вещи в Bitmap:

  • The BackgroundImage
  • The Image
  • Любые графики, созданные в или из Paint события

Если вы r bitmap выходит черным, тогда у вас нет ни одного из трех, или последнее, что у вас есть, все черное. Из вашего описания кажется, что вы можете отобразить изображение в PictureBox. Так что я предполагаю, что вы не отображать его в правильном направлении, вероятно, вы делаете это так:

using (Graphics G = picFP.CreateGraphics()) 
     G.DrawImage(yourCapturedImage, ..) 

Это не будет работать, как это только создает непостоянные графику. Они уходят, например, каждый цикл с минимальным восстановлением и не вызывается из DrawToBitmap звонок

Если вы действительно хотите нарисовать его на поверхности PB, используйте событие Paint! Но более естественный выбор будет установить изображение ПБ непосредственно:

picFP.Image = yourCapturedImage; 

Update 1 Как вы теперь показывают, что вы не проявляете сами, а просто дать ручку управления к внешнему коду objNitgen=picFP.Handle; то же самое применяется: именно Nitgen рисует только на поверхности, и результат нестабильный.

В этом случае средство либо

  • Принимая скриншот результата, а затем работать с этим. Here is a post, который показывает вам, как захватить контроль через скриншот ..

  • Или вы можете проверить, если Nitgen нарисует в растровое изображение непосредственно ..

Для этого вы должны передать его не дескриптор PictureBox, но к Bitmap вместо:

private void button_Click(object sender, EventArgs e) 
{ 
    Bitmap bmp = new Bitmap(picFP.ClientSize.Width, picFP.ClientSize.Height); 
    Graphics G = Graphics.FromImage(bmp); 
    IntPtr dc= G.GetHdc(); 
    objNitgen = dc; 
    objNitgen.capture(); 
    G.ReleaseHdc(dc); 
    pictureBox1.Image = bmp; // now display.. 
    bmp.Save(yourfilename); // .. and/or save 
} 

Update 2

Вы отметили в комментарии, что делает ручная скриншот также не фиксирует изображение; поэтому кажется, что управляющий дескриптор используется только для того, чтобы наложить его на изображение так же, как и наложения видео; если это так, я сомневаюсь, что вы можете получить изображение без использования других, более подходящих методов Nitgen SDK.

+0

Растровое изображение получается белым (пустым). FP фиксируется на событии с нажатием кнопки, который работает абсолютно нормально. Итак, как это сделать: picFp.image = Изображение, видимое в окне изображения – LDin

+0

Чтобы проверить мои предположения, выполните цикл минимизации-максимизации! Сохраняется ли изображение? - Он выводится из кода скриншота в моей ссылке? – TaW

+0

Просмотреть последнее обновление! Использование DrawToBitmap плюс событие Paint не сработало для меня, но должно быть возможно передать дескриптор растрового изображения. – TaW

Смежные вопросы