Поиск шестнадцатеричного цветового кода после применения непрозрачности [дубликат]

Когда вы оцениваете код, очень ясно, что (==) сравнивается в соответствии с адресом памяти, а equals (Object o) сравнивает hashCode () экземпляров. Вот почему сказано, что не разорвать контракт между equals () и hashCode (), если вы не столкнетесь с неожиданностями позже.

    String s1 = new String("Ali");
    String s2 = new String("Veli");
    String s3 = new String("Ali");

    System.out.println(s1.hashCode());
    System.out.println(s2.hashCode());
    System.out.println(s3.hashCode());


    System.out.println("(s1==s2):" + (s1 == s2));
    System.out.println("(s1==s3):" + (s1 == s3));


    System.out.println("s1.equals(s2):" + (s1.equals(s2)));
    System.out.println("s1.equal(s3):" + (s1.equals(s3)));


    /*Output 
    96670     
    3615852
    96670
    (s1==s2):false
    (s1==s3):false
    s1.equals(s2):false
    s1.equal(s3):true
    */
0
задан ericsoco 26 May 2012 в 19:38
поделиться

2 ответа

Я не знаю о OpenGL, но один пиксель непрозрачности A обычно рисуется на другом пикселе, например:

result.r = background.r * (1 - A) + foreground.r * A
result.g = background.g * (1 - A) + foreground.g * A
result.b = background.b * (1 - A) + foreground.b * A

Повторите эту операцию для нескольких пикселей.

3
ответ дан Ry- 19 August 2018 в 20:13
поделиться

Вышеупомянутый ответ работает, если изображение не предварительно умножено на альфа. Однако, если вы используете этот тип смешивания с предварительно умноженным альфа-изображением, будет черная рамка.

Предварительно умноженная альфа:

Когда изображение создается, значения цвета умножаются на альфа-канал. Взгляните на этот пример с одним пикселем:

Pixel: r = 1, g = 0, b = 0, a = 0.5

Когда он будет сохранен, значения rgb будут умножаться на альфа-значение, давая:

Pixel: r = 0.5, g = 0, b = 0, a = 0.5

Чтобы смешать этот вид image вам нужно использовать следующую формулу:

result.r = background.r * (1 - A) + foreground.r
result.g = background.g * (1 - A) + foreground.g
result.b = background.b * (1 - A) + foreground.b

Непремультиплексная альфа

В этом примере альфа-канал полностью отделен от цветных каналов.

Pixel: r = 1, g = 0, b = 0, a = 0.5

Когда он сохранен:

Pixel: r = 1, g = 0, b = 0, a = 0.5

То же самое. В этом случае ответ, предоставленный minitech, является правильным.

Более подробную информацию можно найти здесь: Предварительно умноженная альфа

3
ответ дан Ben Smiley 19 August 2018 в 20:13
поделиться
  • 1
    Ahhh человек, спасибо: D. Этот ответ был действительно полезен. – Taimoor Abdullah Khan 17 April 2018 в 13:53
Другие вопросы по тегам:

Похожие вопросы: