저는 아바타 구성 요소가 투명성이있는 PNG 파일에서 생성되는 아바타 생성기를 만들고 있습니다. 파일은 body_1.png 또는 legs_5.png와 같은 항목입니다. 투명도는 부품 주위이지만 부품 안에 있지 않으며 이미지는 모두 회색 음영입니다. 부품이 잘 겹쳐져 있으며 회색 음영 아바타를 얻을 수 있습니다.Java에서 투명도가있는 회색 음영 이미지를 채색하는 적절한 방법은 무엇입니까?
동적으로이 부분을 색상 화 할 수 있기를 바라지 만, 지금까지 나는 행운을 가지고 있지 않다. 픽셀 데이터를 RGB에서 HSL로 변환하고 원래 픽셀의 L 값을 사용하면서 새로운 색상의 H 값을 제공하려고 시도했지만 결과가 좋지 않습니다.
나는 Colorize grayscale image 검토 한하지만 난 그가 자바에서 일을 무슨 말 할 수없는 것. 나는 네온 컬러를 도처에 상당히 밝게 표현한 이미지로 끝을 맺는다. 그레이 스케일 부분을 색상 화하면서 투명성, 유지를 위해 내가 좋아하는 것이 무엇
이다. 검은 색 외곽선은 여전히 검정색이어야하며 흰색 하이라이트 영역은 여전히 흰색이어야합니다 (제 생각 엔).
아무에게도 좋은 방법이 있을까요?
편집 :
저는 여기에 컬러를 시도 할 수있는 이미지의 :
는 다시, 나는 그레이 스케일 이미지의 밝기 수준을 유지하려는 (그래서 윤곽이 어둠 유지, 그라디언트가 볼 수 있습니다, 흰색 패치가 흰색 임).
나는 다소 Colorizing images in Java를 기반으로하지만 색상이 항상 칙칙한 어두운 보면 작업 LookupOp가를 얻을 수있었습니다. 이것은 내 LookupOp가
protected LookupOp createColorizeOp(short R1, short G1, short B1) {
short[] alpha = new short[256];
short[] red = new short[256];
short[] green = new short[256];
short[] blue = new short[256];
//int Y = 0.3*R + 0.59*G + 0.11*B
for (short i = 0; i < 30; i++) {
alpha[i] = i;
red[i] = i;
green[i] = i;
blue[i] = i;
}
for (short i = 30; i < 256; i++) {
alpha[i] = i;
red[i] = (short)Math.round((R1 + i*.3)/2);
green[i] = (short)Math.round((G1 + i*.59)/2);
blue[i] = (short)Math.round((B1 + i*.11)/2);
}
short[][] data = new short[][] {
red, green, blue, alpha
};
LookupTable lookupTable = new ShortLookupTable(0, data);
return new LookupOp(lookupTable, null);
}
EDIT 2 http://www.color-hex.com/color/b124e7
:
사용되고 색상이 온 (휘도 차를 참고)이다 : 여기
내 출력의 예 : 나는 다음을 사용하여 내 LookupOp가 변경 훨씬 더 좋은 찾고 색상을 가지고 :red[i] = (short)((R1)*(float)i/255.0);
green[i] = (short)((G1)*(float)i/255.0);
blue[i] = (short)((B1)*(float)i/255.0);
을 이 같은
더 나은 도움을 받으려면 [SSCCE] (http://pscode.org/sscce.html)를 게시하십시오. SSCCE에서 이미지를 사용하는 것은 까다 롭습니다. 인터넷상의 이미지에 핫 링크하거나 코드로 생성 할 수 있습니다. –