정수로 코딩 된 두 가지 색상을 혼합하려고합니다. 여기에 내 작은 기능은 다음과 같습니다두 int 색상을 올바르게 혼합하는 방법
int blend (int a, int b, float ratio) {
if (ratio > 1f) {
ratio = 1f;
} else if (ratio < 0f) {
ratio = 0f;
}
float iRatio = 1.0f - ratio;
int aA = (a >> 24 & 0xff);
int aR = ((a & 0xff0000) >> 16);
int aG = ((a & 0xff00) >> 8);
int aB = (a & 0xff);
int bA = (b >> 24 & 0xff);
int bR = ((b & 0xff0000) >> 16);
int bG = ((b & 0xff00) >> 8);
int bB = (b & 0xff);
int A = ((int)(aA * iRatio) + (int)(bA * ratio));
int R = ((int)(aR * iRatio) + (int)(bR * ratio));
int G = ((int)(aG * iRatio) + (int)(bG * ratio));
int B = ((int)(aB * iRatio) + (int)(bB * ratio));
return A << 24 | R << 16 | G << 8 | B;
}
모든 것이 잘 작동하는 것 같다,하지만 특정 인수는 잘못된 색상을 생산하고 있습니다. 예를 들어 :
int a = 0xbbccdd;
int b = 0xbbccdd;
int c = blend(a, b, 0.5f); // gives 0xbaccdc, although it should be 0xbbccdd
내 생각 엔
그래서 올바른 방법은 무엇입니까 ... 유동 비율 또는 주조에 의해 곱셈 중 하나가 여기 비난,하지만 난 그들과 함께 무엇이 잘못되었는지 알아낼 수 있다는 것입니다 Java에서 두 가지 색상을 혼합하는 방법은 무엇입니까?
은 왜 당신이'바이트 []'배열하고, 생성 int 값을 얻기 위해'ByteBuffer'을 사용하지 마십시오
귀하의 의견을 바탕으로 나는 동일한 비율로 n 개의 색상을 혼합 다음과 같은 기능을 만들었습니다 'byte []'배열에서? –
성능 향상을 위해. 내가 틀렸다고 정정 해 주겠지 만 원시물을 만드는 것은 객체를 인스턴스화하는 것보다 훨씬 빠릅니다. 이 코드는 초당 수백 번 실행해야합니다. –
bitwise 작업을 사용하여 찾은 최고의 대답은 여기에 있습니다 : http://stackoverflow.com/a/4787257/303612 –