Figur in verschiedenen Farben einfärben



  • Wie krieg ich das am besten hin? Das Problem is, dass wenn ich ein Bild render, sehr verschiedene Farbtöne rauskommen, ich kann also nicht einfach herkommen und alles was Pink ist, in Blau, Rot und Grün umfärben.

    // TempSurface einfärben:
                        TempSurface->GetDC(&OffDC);
                        for (x = 0; x < 90; x++)
                            for (y = 0; y < 45; y++)
                                if (GetPixel(OffDC, x, y) == PINK)
                                    SetPixel(OffDC, x, y, color);
                        TempSurface->ReleaseDC(OffDC);
    

    Gibt es eine Möglichkeit, alles, was Pink ist, in den selben Helligkeitsstufen in eine andere Farbe zu übertragen?



  • Ich weiß nicht genau ob ich dich richtig verstanden habe...

    Aber kannst du nich einfach ColorKeying benutzen?
    Theoretisch allerdings kein SourceColorKeying, sondern DestinationColorkeying, das du dann auf deine Figur anwendest.

    Die Bereiche, die übermalt werden sollen, färbst du in einer bestimmten Maskenfarbe(pink, hellgrün, etc.) ein, und legst dann eine rote/blaue/irgendwas Bitmap darüber. Theoretisch sollte dann die Maskenfarbe durch die Farbe in der zweiten Bitmap ersetzt werden.

    PH


  • Mod

    also allgemein könntest du das problem vielleicht lösen, indem du die farben in ein anderes system umrechnest

    google z.B. nach YCbCr

    da gibt es die helligkeit (Y) und die farb chrominanz werte, eventuell hat dein zu änderndes ding sehr verschiedene helligkeiten aber ähnliche chrominanzwerte, dann müßtest du vielleicht wenn 5 < Cb < 8 und 24 < Cr < 30 ist diese beiden auf deinen gewünschten wert umrechnen.. danach von YCbCr wieder nach RGB umwandeln..

    aber normalerweise markiert man den bereich in dem man die farbwerte ändern möchte (z.B. mit einer schwarzweiß map) und ändert die

    wie das einfach gehen könnte wäre bei einem rendering so:
    einmal orginal rendern
    einmal mit vertauschten materialien auf den zu ändernden dingen rendern
    beide renderings xor

    und schon weißt du vielleicht wo du was ändern willst.

    rapso->greets();


Anmelden zum Antworten