2011-11-08 5 views
1

JAI를 사용하여 이미지에 "경계선"을 추가하고 있습니다. 예 :JAI를 사용하면 팔레트에 새 색상을 어떻게 추가합니까?

ParameterBlock pb = new ParameterBlock(); 
pb.addSource(r); 
pb.add(leftPad); 
pb.add(rightPad); 
pb.add(topPad); 
pb.add(bottomPad); 

pb.add(new BorderExtenderConstant(consts)); 

r = JAI.create("border", pb); 

위의 'consts'값은 ColorModel에 따라 다릅니다. ComponentColorModel을 사용할 때 각 픽셀에는 자체 색상이 있으므로 팔레트를 사용하지 않아도됩니다. 이미지에 팔레트 (GIF, PNG, ...)가있는 경우 ColorModel은 IndexColorModel입니다.

IndexColorModel을 사용할 때 'consts'는 크기가 1 인 double [] 배열입니다. 배열의 값은 색상 표의 색인입니다.

새로운 IndexColorModel을 작성하여 팔레트를 수정하는 방법을 찾았지만 코딩해야 할 논리가 정신 나간 것입니다! 예를 들어, 내가 팔레트에서 가질 수있는 색상의 수는 많은 요인에 달려 있습니다. 또한 새 팔레트를 추가하기 위해 팔레트에서 색상을 제거해야하는 경우, 제거하기 가장 좋은 색상을 결정하는 논리가 필요합니다. 이전에 해당 색상을 참조하는 모든 픽셀을 수정하십시오. 와우, 많은 코드입니다!)

내 질문은 어떻게 팔레트에 색상을 추가하나요? 기존 도서관이 있습니까? 또는 ioimage에서 무언가를 사용해야합니까? (솔직히 말해서 jai가 "종료"되고 ioimage가 "시작"되는 곳에서 약간 혼란 스럽습니다.)

또한, 사이드 질문으로 인해 팔레트에 약 10 색만있는 테스트 이미지가 다음과 같이 읽혀집니다. 256 색 있습니다. 그런 다음 jai로 이미지를 저장하면 256 색이 모두 저장됩니다 (11-255 모두 검정색). 왜 이런 짓을 한거야?

감사합니다. David

답변

0

위의 질문에 대한 최선의 해결책은 IndexColorModel에서 ComponentColorModel로 이미지를 변환하는 것입니다. (당신이 일해야 더 팔레트가없는 있도록의 ComponentColorModel의 각 픽셀은 고유의 색상을 지정합니다 - 당신은 쉽게 당신이 원하는 어떤 색상을 사용할 수 있습니다.)

나는이 간단한 해결책 캠 http://java.sun.com/products/java-media/jai/forDevelopers/jaifaq.html#palette

를 읽고 이것은 이미지를 읽은 후 내가하고있는 일입니다.

if(image.getColorModel() instanceof IndexColorModel) { 
    IndexColorModel icm = (IndexColorModel)image.getColorModel(); 
    byte[][] data = new byte[4][icm.getMapSize()]; 

    icm.getReds(data[0]); 
    icm.getGreens(data[1]); 
    icm.getBlues(data[2]); 
    icm.getAlphas(data[3]); 

    LookupTableJAI lut = new LookupTableJAI(data); 

    image = JAI.create("lookup", image, lut); 
} 

일단 조작을하면 이미지를 다시 되돌릴 수 있습니다. 나는 그것을 이해할 시간을 허비하지 않았다. 다른 사람이 알아 내고 싶다면 다음을 읽어보십시오. http://www.java.net/node/675577