Когда вы оцениваете код, очень ясно, что (==) сравнивается в соответствии с адресом памяти, а 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
*/
Я не знаю о 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
Повторите эту операцию для нескольких пикселей.
Вышеупомянутый ответ работает, если изображение не предварительно умножено на альфа. Однако, если вы используете этот тип смешивания с предварительно умноженным альфа-изображением, будет черная рамка.
Предварительно умноженная альфа:
Когда изображение создается, значения цвета умножаются на альфа-канал. Взгляните на этот пример с одним пикселем:
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, является правильным.
Более подробную информацию можно найти здесь: Предварительно умноженная альфа