2014-05-23 2 views
0

Je suis en train de charger une image dans mon application, puis de la convertir en données base64 et de l'afficher de nouveau (sur une page HTML). Mais quand je fais ça, les couleurs sont différentes! J'utilise getPixel32 pour récupérer les données d'image. J'ai lu quelque part que Flash utilise des valeurs précalculées et c'est la raison. Je l'ai vaguement compris. Quelqu'un peut-il expliquer ou lier un article expliquant ce qui se passe et comment le réparer?La copie des données Bitmap est une couleur incorrecte?

Snippet de code:

byteArray = bitmapData.getPixels(new Rectangle(0, 0, bitmapData.width, bitmapData.height)); 

Aussi, est-il possible, il est perdu son profil de couleur?

MISE À JOUR
Je y compris le code que j'utilise pour prendre une capture d'écran et de le convertir à la base de données 64. http://pastebin.com/Q7MiWg9u

+0

Cela diffère-t-il si vous produisez un fichier JPG ou PNG? Avec les fichiers PNG, il y a l'alpha prémultiplié, tandis que le format JPG ne prend pas en charge l'alpha du tout. – Vesper

+0

Question devrait être autonome si possible, s'il vous plaît ne postez pas seulement des liens vers votre code, incluez-le dans votre question! – ndm

Répondre

2

C'est une très bonne question! Je publie ceci comme réponse d'abord parce que c'est trop long pour un commentaire et ensuite parce que cet article vous aidera au moins à comprendre quel est le problème: http://www.quasimondo.com/archives/000665.php

Tout est dû à l'alpha pré-multiplié et à la façon dont Flash travaille avec.

Je vais faire quelques petits tests pour voir si vous pouvez réellement résoudre ce problème en utilisant getPixel32 et setPixel32, où vous pouvez utiliser les valeurs unmultipleid et calculer les valeurs réelles que vous devez définir.

+0

Le lien a été très utile mais surtout sur ma tête. Pourriez-vous peut-être le résumer? Est-il possible de faire vos petits tests? Cela pourrait m'aider à comprendre ce qui se passe. –

+0

En outre, dans l'article il écrit des couleurs hexadécimales avec 8 caractères comme ceci, "# 00000000" au lieu des 6 caractères communs comme ceci, "# 000000". Je comprends que deux des personnages sont l'alpha? –