L'édition 8bpp indexé Bitmaps
je suis en train de modifier les pixels d'une 8bpp. Depuis cette PixelFormat est indexé je suis conscient qu'il utilise une Table de Couleurs pour mapper les valeurs de pixel. Même si je peux modifier l'image en le convertissant en 24bpp, 8bpp édition est beaucoup plus rapide (13ms vs 3ms). Mais, en changeant chaque valeur lors de l'accès à la 8bpp bitmap résultats dans certains aléatoire de couleurs rvb, même si le PixelFormat reste 8bpp.
Je suis en train de développer en c# et l'algorithme est le suivant:
(C#)
1 - Charge Bitmap d'origine à 8bpp
2 - Créer le Vide temp Bitmap avec 8bpp avec la même taille que l'original
3-LockBits de deux images et, à l'aide de P/Invoke, l'appel de c++ méthode où je passe la Scan0 de chaque objet BitmapData. (J'ai utilisé du c++ méthode qu'il offre de meilleures performances lors du parcours de l'image pixels)
(C++)
4 - Créer un int[256] la palette en fonction de certains paramètres et de modifier le temp bitmap octets en passant de l'original de valeurs de pixels par le biais de la palette.
(C#)
5 - UnlockBits.
Ma question est comment puis-je modifier les valeurs de pixel sans avoir l'étrange couleurs rvb, ou mieux encore, de modifier le 8bpp bitmap Couleur du Tableau?
OriginalL'auteur Pedro Sá | 2010-04-07
Vous devez vous connecter pour publier un commentaire.
Il n'est pas nécessaire de se déplacer en C++, de la terre ou de l'utilisation de P/Invoke à tous; C# prend en charge les pointeurs et le code unsafe parfaitement bien; je peut même spéculer que c'est la cause de vos problèmes.
Les couleurs sont probablement à venir à partir de la Palette par défaut. Vous trouverez que la modification de la Palette ne doit pas être lent. C'est ce que je fais pour créer une palette nuances de gris:
Il suffit de régler le
Palette
le retour des biens. Redimensionnement d'une image est différente, utilisezGraphics.DrawImage
sur une nouvelle image de la droite dumensions.Les graphiques.DrawImage n'est pas pris en charge sur l'indexation formats de pixel, et la conversion de non-indexé nie la vitesse de bénéficier de l'aide de indexés formats.
OriginalL'auteur Dai
Imaginez que votre indexé 8ppp graysacle sont stockées dans un tableau linéaire dataB (pour la vitesse)
Essayez ce code:
OriginalL'auteur Jose Manuel Piñeiro
Avez-vous essayé de charger une
System.Drawing.Image
à la place? Cette classe vous permet d'accéder à la palette de couleurs. Vous pouvez enrouler ensuite leSystem.Drawing.Image
comme unSystem.Drawing.Bitmap
une fois que la palette est réglé.Je ne suis pas sûr de savoir comment
System.Drawing.BitMap.SetPixel()
fonctionne avec des images en couleurs indexées. Il pourrait être qu'il essaie de la carte la plus proche de la couleur dans la palette.La messagerie unifiée.
Bitmap
hérite deImage
... et a donc la même Palette. Et vous pouvez copier des palettes simplement avecbm2.Palette = bm1.Palette
.OriginalL'auteur Paul Ruane