2012-12-01 1 views
3

BufferedImage 개체를 사용하여 getRGB(int x, int y)을 호출하면 하나의 음수를 얻습니다.Java - getRGB에 대한 빨강, 초록, 파랑 ​​

세 개의 서로 다른 값 (빨강, 초록, 파랑)을 어떻게 하나의 음수로 변환 할 수 있습니까?

+0

응답으로. 모든 BufferedImage에는, 모든 픽셀을 보관 유지하는 배열이 포함되어 있습니다. BufferedImage의 형태가 TYPE_INT_RGB의 경우, 배열은 int 배열이됩니다. 따라서 많은 픽셀 조작을 원할 경우 해당 배열에 직접 작성하여 프로그램 속도를 높일 수 있습니다. int [] pixels = ((DataBufferInt) image.getRaster(). getDataBuffer()). getData() – SpiderPig

답변

10

색상 클래스를 사용 :

new Color(r, g, b).getRGB() 
+0

이것은 필요한 것보다 많은 리소스를 사용합니다. – Vulcan

+0

하지만 작동합니다, 대단히 감사합니다! – Confiqure

+0

@ 벌룬 : 동의 함. 그러나 Color는 오픈 소스이기 때문에 OP는 코드를 "훔칠"수 있습니다. –

3

BufferedImage에 다음과 같은 코드를 사용 java.awt.image.ColorModel에 위임 끝 :

public int getRGB(Object inData) { 
    return (getAlpha(inData) << 24) 
     | (getRed(inData) << 16) 
     | (getGreen(inData) << 8) 
     | (getBlue(inData) << 0); 
} 

을 필요에 따라이 수정 사소한 훈련이다.

-1

JB Nizet의 대답은 훌륭하지만이지만 'Color'유형의 새 개체를 수천 번 만들 때 정말 느려질 수 있습니다. 가장 간단한 방법은 다음과 같습니다

int rgb = (red << 16 | green << 8 | blue) 

BTW ByteBit

+2

이것을 훔 쳤나요? lol http://stackoverflow.com/questions/24594046/converting-red-green-and-blue-to-rgb/24596140#24596140 – ByteBit

+0

답변에 대한 참조를 제공하지 않아 죄송합니다. 이제 수정 사항을 확인하십시오. – Nepster