Question

Voici donc les détails (je suis en C # BTW):

Je reçois une image 32bpp (JPEG compressé) à partir d'un serveur. À un certain point, je voudrais utiliser la propriété Palette d'une image bitmap à la couleur des pixels sur-saturés (luminosité> 240) rouge. Pour ce faire, je dois obtenir l'image dans un format indexé.

Je l'ai essayé de convertir l'image au format GIF, mais j'obtenir une perte de qualité. J'ai essayé de créer une nouvelle image dans un format d'index par ces méthodes:

// causes a "Parameter not valid" error
Bitmap indexed = new Bitmap(orig.Width, orig.Height, PixelFormat.Indexed)

// no error, but the resulting image is black due to information loss I assume
Bitmap indexed = new Bitmap(orig.Width, orig.Height, PixelFormat.Format8bppIndexed)

Je suis à une perte maintenant. Les données de cette image est modifiée en permanence par l'utilisateur, donc je ne veux pas définir manuellement les pixels qui ont une luminosité> 240 si je peux l'éviter. Si je peux mettre la palette une fois lorsque l'image est créée, mon travail est fait. Si je vais sur ce la mauvaise façon de commencer s'il vous plaît laissez-moi savoir.

EDIT: Merci les gars, voici quelques plus de détails sur ce que je tente d'accomplir

.

Nous le balayage d'une lame de tissu à haute résolution (application de la pathologie). Je vous écris l'interface au scanner réelle. Nous utilisons une caméra à balayage linéaire. Pour tester la vitesse de ligne de la caméra, l'utilisateur scanne une partie très petite et regarde l'image.

L'image est affichée à côté d'une barre de piste. Lorsque l'utilisateur déplace la barre de piste (débit de ligne réglage), je change l'intensité globale de l'image dans une tentative de modéliser ce qu'il ressemblerait au nouveau taux de la ligne. Je le fais en utilisant un objet ImageAttributes et ColorMatrix actuellement.

Lorsque l'utilisateur ajuste la barre de piste, j'ajuste la matrice. Cela ne me donne pas par des informations de pixels, mais la performance est très agréable. I peut utiliser LockBits et un code dangereux ici, mais je préfère ne pas réécrire si possible. Lorsque la nouvelle image est créée, je voudrais que tous les pixels d'une valeur de luminosité de> 240 à être de couleur rouge. Je pensais que la définition d'une palette pour le bitmap à l'avant serait une manière propre de le faire.

Était-ce utile?

La solution 3

Merci pour l'aide tout le monde. Il semble que cela peut être résolu en utilisant la classe ImageAttributes et définissant simplement une table de remappage couleur.

ColorMap[] maps = new ColorMap[someNum]
//  add mappings
imageAttrs.SetRemapTable(maps);

Merci pour l'aide encore une fois, au moins j'appris quelque chose.

Autres conseils

Voulez-vous profiter de 32bpp à 8bpp indexé entraînera presque toujours une perte de qualité, à moins que l'image originale a moins de 256 couleurs au total.

Pouvez-vous créer une autre image qui est une superposition avec le rouge des pixels touchés, puis montrer à la fois de ceux?

Puisque vous allez pour la luminosité> 240, vous pouvez convertir la superposition en niveaux de gris d'abord, puis à indexé pour obtenir les pixels trop brillante.

Vous ne spécifiez pas ce que vous faites avec elle une fois que vous avez marqué les délinquants, donc je ne sais pas si cela va fonctionner.

On dirait que quelque chose que vous pouvez faire facilement avec un pixel shader. Même très tôt des modèles de shaders soutiendraient quelque chose d'aussi simple que cela.

La question est cependant:

Pouvez-vous inclure le support des shaders dans votre application sans trop hastle?

Connaissez-vous la programmation des shaders?

EDIT:

Vous n'avez probablement pas un contexte 3D où vous pouvez faire des choses comme ceci = /

Je suis la plupart du temps que mes pensées Diffusée.

le pixel Manipuler image par pixel doit être faisable en temps réel avec un seul CPU devrait pas?

Dans le cas contraire, regardez la programmation GPGPU et Open CL.

EDIT DE NOUVEAU:

Si vous avez donné quelques détails sur ce que l'application ne fait que nous pourrions aider un peu plus? Par exemple, si vous faites un pas de mes conseils web-app serait logique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top