I zostały eksperymentowanie z przykładu Change HUE/Saturation
znaleźć na stronie internetowej EFG: http://www.efg2.com/Lab/Library/Delphi/Graphics/Color.htmZmienić HUE bitmapy, ale zachować kolor tła?
chcę użyć technik znalezione w tym przykładzie zmiany wartości kolorów niektórych bitmap (być używany na TImage). Jest jeden problem, z którym mam do czynienia, i to jest z TImages, które mają przezroczyste bitmapy; Nie chcę, aby kolor tła zmieniał jego HUE, a raczej tylko rzeczywiste dane obrazu.
Weź ten przykładowy obraz możemy pracować (chociaż każdy obraz z przejrzystości może być używany):
- Pobierz demo
Change HUE/Saturation
z linku na górze. - Załaduj obrazek przycisku powyżej do ImageOriginal.
- Ustaw nasycenie delta na 1.
- Uruchom projekt.
Niektóre wyniki wyjściowe:
Jakie chciałbym się zdarzyć Oto zachować oryginalny kolor tła (określony przez lewej dolnej najwięcej piksel), a jedynie dopasować odcień dla reszty obrazu. Tak więc, wyniki wyjściowe faktycznie wyglądać następująco (edytowane w Paint.NET):
Pozwól mi użyć innego przykładowy obraz do przetestowania z tym zawiera więcej danych obrazu:
jak poprzednio z pierwszej próbki obrazu, wyniki mogłyby być coś takiego:
Gdy wyniki pragnę powinien wyglądać tak:
Jeden pomysł miałam po zmianie barwy, wymienić dolny lewy najwięcej koloru z kolorem od oryginału, ale jestem nie jestem pewien, czy to jest właściwe podejście, czy nie, a nawet jeśli nie jestem pewien, jak zastąpić kolor X dla innego koloru. (Grafika i matematyka są poza mną).
Na przykład, jeśli narysowałem dwa okręgi koloru niebieskiego na ucho Mickeya (niebieski był oryginalny kolor przezroczysty z lewej dolnej najwięcej piksel), a także kolorowe oczy:
ponownie Zmiana odcienia może wyglądać następująco:
gdy w rzeczywistości powinno się podoba:
Po prostu chciałbym zmienić HUE obrazu, niezależnie od tego, czy jest to metoda użyta w demo EFG, czy inne rozwiązanie. Przezroczysty kolor zdefiniowany przez dolny lewy górny piksel nie powinien być zmieniany po zmianie HUE, to powinno pozostać takie samo, jak pokazano na przykładowych obrazach.
Jak zmienić kolor mapy bitowej z zachowaniem koloru tła?
Doskonały Sertac, który działa tak, jak miałem nadzieję. Czy mógłbyś wyjaśnić tę linijkę: "FixColor: = PRGBTripleArray ( ImageOriginal.Picture.Bitmap.ScanLine [Bitmap.Height - 1])^[0];" Czy to jest odpowiednik użycia Pixels [], ale czy jest szybszy? Nie jestem pewien, co robi bit [0]. –
@Blobby - Możesz w rzeczywistości usunąć '^', nie jest to potrzebne (do czego wskazuje PRGBTripleArray, ale kompilator może go rozwiązać bez '^'), lewa część to TRGBTripleArray, stąd [0] jest pierwszy element tablicy. Szybkość nie jest ważna, ponieważ czytamy tylko jeden piksel, można bardzo dobrze wykorzystać Pixels. –
Wielkie dzięki za oczyszczenie tego. Myślę, że rozumiem również drugi kod - 'if (RowIn [i] .rgbtBlue = FixColor.rgbtBlue) i' .. to sprawdza kolor każdego piksela w kanale RGB i czy każdy z komponentów RGB jest równy FixColor przekształcić go w FixColor? –