2017-07-24 4 views
1

J'ai un tableau de Texture2D, qui est rempli par le webcamtexture pendant quelques secondes. Cette partie fonctionne, tous les 50 cadres ou environ apparaissent dans l'inspecteur amende.setPixels32() dans l'unité crée des textures vides

Maintenant, nous modifions ces images en appelant .GetPixels32() pour obtenir un Color32[] pour chaque image. à titre d'exemple, nous pouvons essayer de définir chaque canal sur le Math.Max de chaque pixel entre la trame actuelle et la trame précédente (essentiellement un «alléger» le mélange), et remplacer la texture dans le tableau par la texture nouvellement modifiée. (Ce code commence à partir du deuxième cadre, le problème ne provient pas d'ensemble hors limites)

Color32[] previousColors = previousFrame.GetPixels32(); 
    Color32[] currentColors = currentFrame.GetPixels32(); 
    Color32[] outColors = new Color32[colors.Length]; 
    int i = 0; 
    while (i < currentColors .Length) 
    { 
     outColors[i].b = Math.Max(previousColors[i].b, currentColors[i].b); 
     outColors[i].r = Math.Max(previousColors[i].r, currentColors[i].r); 
     outColors[i].g = Math.Max(previousColors[i].g, currentColors[i].g); 
    } 
    bufferedPics[frameIndex].SetPixels32(outColors); 
    bufferedPics[frameIndex].Apply(); 

est ici où le problème se produit: Dans l'inspecteur, les cadres du tableau montrent tous maintenant vide. Mais en cliquant sur le cercle à droite d'eux, il montre le cadre allégé et correctement modifié. Essayer d'utiliser ces cadres ailleurs, ils apparaissent vides et transparents.

+0

Pouvez-vous montrer comment vous éditez les pixels? Peut-être un exemple d'opérations (par exemple définir une sous-région en bleu). Attention, puisque vous construisez un nouveau tableau, tous les pixels sont définis en noir transparent. –

+0

Veuillez donner un peu plus d'effort à la formulation et à la mise en forme de votre question pour permettre aux autres utilisateurs de comprendre votre question et de fournir une réponse. – Xaser

+0

@Xaser désolé pour le formatage, c'est le premier message que j'ai mis en place ici. merci pour les corrections. – v8ntage

Répondre

1

Color32 a quatre canaux: rouge, vert, bleu et alpha . Par défaut, alpha est 0 (ce qui signifie transparent). Vous devez définir alpha à pour laisser l'image être opaque.

Color32[] previousColors = previousFrame.GetPixels32(); 
Color32[] currentColors = currentFrame.GetPixels32(); 
Color32[] outColors = new Color32[colors.Length]; 
int i = 0; 
while (i < currentColors .Length) 
{ 
    outColors[i].b = Math.Max(previousColors[i].b, currentColors[i].b); 
    outColors[i].r = Math.Max(previousColors[i].r, currentColors[i].r); 
    outColors[i].g = Math.Max(previousColors[i].g, currentColors[i].g); 
    outColors[i].a = 255; // set the alpha channel to opaque 
} 
bufferedPics[frameIndex].SetPixels32(outColors); 
bufferedPics[frameIndex].Apply();
+0

c'est la bonne réponse :) merci encore – v8ntage