2012-07-12 4 views
0

Mon objectif est de prendre une photo en utilisant l'appareil photo sur un périphérique Windows Mobile et de convertir cette image en bitmap monochrome afin qu'elle puisse imprimer sur une imprimante Bluetooth en utilisant le. NET Compact Framework. J'ai trouvé la réponse que je cherchais ici:Image noire fixe après conversion de bitmap en monochrome sur .NET Compact Framework

Convert image to 1 bpp bitmap in .net compact framework

Quand j'ai ajouté ce code et testé avec une image que je pris avec l'appareil photo (fichier .jpg à propos de 300K en taille), je passai cette image dans la code du code dans la solution stackoverflow ci-dessus et il s'est terminé sans erreurs. Lors de la visualisation de l'image bitmap, il s'agit d'une image noire solide. Le bitmap d'origine transmis dans le code doit-il avoir une certaine résolution ou existe-t-il d'autres restrictions? L'image originale prise avec l'appareil photo était en noir et blanc pour commencer.

+0

L'image d'origine était-elle réellement en noir et blanc ou était-elle en niveaux de gris? Parce que cela pourrait être traiter n'importe quoi avec un soupçon de couleur dedans comme noir et seulement blanc pur comme blanc. –

+0

Ouais c'était ma supposition, c'est en fait une image "couleur" et ne contient probablement pas un seul pixel blanc mais je pensais que c'était censé convertir n'importe quelle image en monochrome. –

+0

Si cela est vrai, je pense que vous devrez d'abord nettoyer manuellement l'image en fonction d'une valeur de seuil avant de faire un 'DrawImage' sur le 1BPP DeviceContext. [Bitmap.LockBits] (http://msdn.microsoft.com/fr-fr/library/5ey6h79d.aspx), puis en bouclant chaque pixel et en le définissant en Blanc ou Noir en premier sera probablement le seul moyen. Vous devrez décider à quel point un pixel a assez de couleur pour l'appeler noir. –

Répondre

0

Ceci est un problème délicat. Ce que vous devez vraiment faire pour obtenir des résultats raisonnables est d'implémenter un algorithme de tramage qui permet à l'imprimante d'espacer proportionnellement les points blancs et noirs en fonction de la "noirceur" du pixel d'origine. Si vous limitez votre algorithme à la conversion de chaque pixel en blanc ou en noir, la sortie ne sera pas une très bonne représentation de la photo originale que vous avez prise. Avec le tramage, vous analysez chaque pixel de l'entrée et ajustez les pixels environnants sur la sortie en fonction de la noirceur du pixel d'entrée.

Une commune mise en œuvre tramage est l'algorithme de Floyd-Steinberg, décrit dans sa forme de base ici:

Floyd-Steinberg Dithering

plus d'informations Beaucoup est là si vous google pour elle.

Comme ce n'est pas vraiment un algorithme trivial à implémenter, soyez prêt à passer plus d'un après-midi pour le faire correctement.

Questions connexes