2015-11-05 1 views
-1

Je travaille avec un module d'empreinte digitale et je suis capable de capturer et d'afficher la sortie dans une zone d'image (C#). Maintenant, picture.Image est null même si picturebox affiche une image. J'essaie donc de sauvegarder l'image de la zone d'image en tant que bmp, puis j'assigne ce bmp à la même zone d'image afin que Picturebox.image ne soit pas vide.Conversion de l'image PictureBox en bitmap

Voici le code:

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

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

Ici l'image bitmap enregistrée est vide. Quel peut être le problème?

+0

Comment capturer et afficher la sortie dans la zone d'image? – jhmt

+0

J'utilise Nitgen SDK et je suis capable de capturer la sortie d'empreinte digitale et de l'afficher dans l'image. DrawToBitmap() me donne une image bitmap vide – LDin

+0

Je n'ai aucune expérience dans Nitgen SDK mais cette question (http://stackoverflow.com/questions/14182487/windowsform-picturebox-image-is-null-even-though- theres-an-image-shown-in-the-f) pourrait vous être utile. – jhmt

Répondre

1

Un PictureBox a trois couches, il peut afficher et PictureBox.DrawToBitmap mettra trois choses dans le Bitmap:

  • Les BackgroundImage
  • Les Image
  • Tous les graphiques créés ou de l'événement Paint

Si vous r bitmap sort noir alors vous n'avez aucun des trois, ou le dernier que vous avez est tout noir. De votre description, il semble que vous pouvez afficher l'image dans le PictureBox. donc je suppose que vous ne l'affiche pas dans le droit chemin, probablement vous le faites comme ceci:

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

Cela ne fonctionnera pas car il ne crée que non persistants graphiques. Ceux-ci disparaissent avec, par exemple, chaque cycle de minimisation-restauration et ne sont pas appelés depuis l'appel DrawToBitmap

Si vous voulez vraiment le dessiner sur la surface du PB, utilisez l'événement Paint! Mais le choix le plus naturel serait de mettre l'image de PB directement:

picFP.Image = yourCapturedImage; 

Mise à jour 1 Comme vous révélez maintenant que vous n'affichez pas vous-même mais simplement donner la poignée de commande au code externe objNitgen=picFP.Handle; même s'applique: C'est que Nitgen dessine seulement sur la surface et le résultat est non persistant.

Dans ce cas, le remède est soit

  • Prendre une capture d'écran du résultat puis travailler à partir de cela. Here is a post qui vous montre comment capturer un contrôle via capture d'écran ..

  • Ou vous pouvez vérifier si Nitgen puisera dans un bitmap directement ..

Pour cela, vous devriez être à passer pas une poignée au PictureBox mais à un Bitmap à la place:

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 
} 

Mise à jour 2

Vous avez noté dans un commentaire qui fait un capture d'écran manuelle ne capture pas non plus l'image; il semble donc que la poignée de contrôle ne soit utilisée que pour la superposer à l'image comme le font les superpositions vidéo; Si tel est le cas, je doute que vous puissiez obtenir à l'image sans utiliser d'autres méthodes Nitgen SDK plus appropriées.

+0

L'image bitmap est blanche (vide). Le FP est capturé sur un événement de clic de bouton qui fonctionne absolument bien. Alors, comment puis-je faire ceci: picFp.image = Image visible dans la zone d'image – LDin

+0

Pour tester mes hypothèses faire un cycle minimiser-maximiser! L'image persiste-t-elle? - Il sort blanc du code de capture d'écran dans mon lien ?? – TaW

+0

Voir ma dernière mise à jour! L'utilisation de DrawToBitmap plus l'événement Paint n'a pas fonctionné pour moi mais distribuer un handle à un bitmap devrait être possible .. – TaW