2012-09-20 2 views
3

내 질문에 drawImage 메서드가 Java Graphics2D (이는 Android 용이 아닌 데스크톱 용)에 포함됩니다.자바 drawImage 보간

고화질 이진 데이터가 포함 된 BufferedImage 대부분의 픽셀은 검정색이지만 일부 녹색 픽셀이 희미합니다. 녹색 픽셀은 들어오는 원시 데이터 스트림의 데이터 포인트를 나타냅니다. 비트 맵은 상당히 커서 나의 전형적인 패널 크기보다 큽니다. 크기를 크게 잡아서 확대/축소 할 수있었습니다. 문제는 내 녹색 픽셀을 잃어 버릴 때 축소하는 것입니다. 이미지가 1000 픽셀이고 패널이 250 픽셀이면 각 방향 (X 및 Y)에서 4 픽셀 중 1 개를 잃게됩니다. 내가 가장 가까운 이웃 보간법을 사용하면 픽셀을 스케일 할 때 검정으로 사라질 수 있습니다. 쌍 선형 보간과 같은 것을 사용하면 내 초록색 픽셀이 검은 색과 녹색색 사이에서 다시 채색됩니다.

나는이 모든 행동을 이해하지만 내 질문은 내가 원하는 동작을 얻을 수있는 방법이있다. 이는 픽셀이 검정색이 아닌지 전체 강도에서 그려 지도록하려는 것이다. 아마도 "최대 홀드 (max-hold)"보간과 같은 것입니다.

검은 색 배경 위에 도형 프리미티브를 그리면 원하는대로 할 수 있다는 것을 알고 있습니다. 어쩌면 이것이 내가해야 할 일입니다. 그러나 비트 맵을 사용하는 이유가 있습니다 (떨어지는 스펙트로 그램 디스플레이에서 데이터를 보여주고 있다는 사실과 관련이 있습니다. 그리고 모든 픽셀을 검정색이 아닌 색상으로 표시 할 수있는 모드가 있습니다. 녹색). 자바에서 구현하는 것은 정말 느린 것 재 있도록

감사합니다,

+0

자신의 보간 알고리즘을 사용하여 이미지를 스캔하고 픽셀 당 픽셀을 페인트 할 수는 있지만 느려질 수 있습니다. [JAI] (http://www.oracle.com/technetwork/java/index.html) 또는 [ImageJ] (http://rsbweb.nih.gov/ij/)에서 찾을 수 있습니다. 하지만 성능면에서 드로잉 프리미티브를 사용하여 장면을 렌더링해야한다고 생각합니다. –

+0

* "각 방향으로 4 픽셀 중 1 개를 잃어 버림"* 아니요, 3 중 4 –

+0

사실, 3 of 4, 내 실수 –

답변

0

당신의 drawImage의 구현을보고이 원하는 행동을 얻기 위해 오버라이드 (override) 할 수 그러나 아마 스케일링의 핵심은 하드웨어 가속을 사용합니다.

당신은 JOGL을 들여다 볼 수는 있지만 픽셀이 너무 희박한 경우 검정색 배경 (또는 이미지)의 녹색 픽셀을 그리는 것만으로도 코드 작성이 쉽고 빠릅니다. 도트의 수가 너무 높아지기 시작하면 도트를 그림으로 그릴 때 휴리스틱 스를 전환 할 수도 있습니다.