2014-11-11 2 views
0

두 이미지로 오버레이 작업을 수행하고 싶습니다. 이러한 이미지의 밴드 수와 데이터 유형이 같아야 오버레이 작업을 수행 할 수 있습니다. 따라서 FormatDescriptor을 사용하여 한 이미지의 데이터 유형을 다른 이미지의 데이터 유형으로 변경합니다. 그러나 이제 이미지는 모두 흰색입니다.JAI FormatDescriptor 이미지가 흰색이됩니다.

정상입니까? 또는 FormatDescriptor에 오류가 있습니까?

RenderedImage finalImage = loadTiles(i, columns, rows);   
// Format Image so that the data type matches that of the overlay 
finalImage = FormatDescriptor.create(finalImage, overlay.getSampleModel().getDataType(), null); 
images.add(finalImage); 
columns = roundUp(columns, 2); 
rows = roundUp(rows, 2); 

여러분의 도움에 감사드립니다 :

다음은 재 포맷에 대한 코드입니다.

EDIT 이미지의 데이터 유형과 일치하도록 오버레이의 포맷을 시도했습니다. 그렇게하면 이미지가 올바르게 표시되지만 오버레이는 완전히 검은 색입니다. 다음

정상 데이터 유형

은 :

이미지 : 데이터 타입 = 1 (USHORT)

오버레이 = 0 (바이트)

EDIT 내가 아니라 포맷 시도 데이터 형식 이미지를 다른 모든 데이터 유형으로 변환합니다. 그리고 매번 나는 같은 결과를 얻었습니다. 이미지는 모두 흰색이었습니다. 단편화 할 때를 제외하고. 그런 다음 NullPointerException이 있습니다.

내가 뭘 잘못하고 있는지 전혀 모르겠다. Format Operation을 사용하는 많은 다른 예들을 발견했으며, 같은 방식으로 사용했습니다. 그러나 다시 포맷 할 때 흰색 이미지가 나타나면 포맷 작업을 사용할 때 어떤 점이 있습니까? 이미지의 데이터 유형을 변경하여 오버레이의 데이터 유형과 일치시키는 다른 방법이 있습니까?

답변

0

좋아, 나는 이미지의 데이터 유형을 변경하는 다른 방법을 알아 냈다. LookupTableJAI을 사용하는 것이 가능합니다.

byte[] tableData = new byte[0x10000]; 
for (int j = 0; j < 0x10000; j++) { 
    tableData[j] = (byte)(j >> 8); 
} 

LookupTableJAI table = new LookupTableJAI(tableData); 
finalImage = JAI.create("lookup", finalImage, table); 
: 아래는 내가 이미지를 변환하는 데 사용되는 코드는
관련 문제