2009-12-03 10 views

Répondre

1
var n:Number = 1/3; 
var matrix:Array = [n,n,n,0,0, 
        n,n,n,0,0, 
        n,n,n,0,0, 
        0,0,0,1,0]; 

var cmf:ColorMatrixFilter = new ColorMatrixFilter(matrix); 
bitmap.filters = [cmf]; 
+0

LopSae n'est-il pas exactement le même que le mien, sauf qu'il ajuste les valeurs de luminosité? Et pourquoi je ne peux pas commenter la réponse de LopSae? Très étrange ... Pour ce que chaque valeur dans la matrice ne, voir: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/filters/ColorMatrixFilter.html – alecmce

+0

@LopSae - Je suis nouveau à StackOverflow, n'ont pas entièrement élaboré tous ses idiosyncracies grâce! ;) La différence que vous voyez peut être très subtile selon l'image source. Si vous utilisez une image de test avec des couleurs vives et lumineuses, alors les différentes valeurs auront moins d'effet visible qu'une image avec des nuances plus subtiles ... – alecmce

+0

Les maths ne sont pas trop dures ... pour chaque pixel , il prendra les composantes rouges, vertes et bleues de la couleur de pixel et les multipliera par le premier deuxième et troisième élément de la matrice (dans mon cas 1/3, dans votre cas 0.2.0.7,0.1), ajoutez-les ensemble et mettre ce résultat en tant que valeur rouge. Ensuite, il prend les mêmes composantes de la couleur du pixel et les multiplie par les sixième, septième et huitième éléments de la matrice, et les met en vert. Semblable pour le bleu avec les 11ème, 12ème et 13ème. Cela produit des niveaux de gris parce que dans le résultat, les parties pour le rouge, le vert et le bleu sont les mêmes. – alecmce

1

En général, en supposant que vous commencez avec une image RVB, vous le convertir en espace couleur HSI et utilisez la Je (intensité) composante.

1

Pour convertir une image en niveaux de gris, vous devez parcourir chaque pixel du tampon d'image et calculer la moyenne des composantes R, G et B en une entité, puis la dupliquer trois fois pour obtenir la nouvelle couleur. pseudo-code (en supposant couleur 8bit):

for each pixel in buffer: 
    pixel.rgb = ((pixel.red + pixel.green + pixel.blue)/3) * 0x010101; 

Je suis sûr que vous pouvez faire quelque chose avec PixelBender d'Adobe pour y parvenir plus rapidement.

+0

En variante, l'intensité est parfois défini comme max (r, g, b). – Dima

0

appliquer le filtre créé par cette méthode à la DisplayObject qui contient l'image souhaitée en noir et blanc:

public static function createBlackAndWhiteFilter():ColorMatrixFilter { 
    var rLum:Number = 0.2225; 
    var gLum:Number = 0.7169; 
    var bLum:Number = 0.0606; 

    var bwMatrix:Array = [rLum, gLum, bLum, 0, 0, rLum, gLum, bLum, 0, 0, rLum, gLum, bLum, 0, 0, 0, 0, 0, 1, 0]; 
    return new ColorMatrixFilter(bwMatrix); 
}//createBlackAndWhiteFilter 
+0

Même si je ne comprends pas complètement, je vais essayer ça! Mais: Pour ce que signifient les valeurs spécifiques, et pourquoi y a-t-il exactement 20 valeurs nécessaires dans le tableau? Peut-être que je ne devrais pas demander trop et juste l'utiliser ...: -J – algro

+0

Les 20 valeurs dans le tableau sont de faire une matrice 5x4, qui est en fait presque la même que celle affichée dans cette même question par alecmce, juste écrit dans une ligne. Les différentes valeurs sont liées (autant que je sache) à l'intensité lumineuse différente de chaque couleur de composant. Donc, vous réduisez l'intensité de chaque couleur dans différentes mesures de sorte que chacun devient une nuance de gris. – LopSae

+0

@alecmce: Nous ne pouvons pas commenter les réponses des uns et des autres car nous n'avons pas encore 50 de réputation (ce qui nous limite aux commentaires sur nos propres réponses seulement). Et oui, est la plupart du temps la même réponse, que j'ai compris il y a quelques temps. Désolé pour ça.Ce que j'ai trouvé vraiment déroutant, c'est que l'utilisation de votre matrice avec 1/3, avec 1, et ma matrice produit exactement le même effet, pas de nuances différentes, pas d'intensités différentes ... donc la valeur réelle compte vraiment pour quelque chose? – LopSae

Questions connexes