나는 밤새 안드로이드를 사용하여 일련의 비트 맵을 완전히 서로 인접하게 (그 사이에 간격을 두지 않고) 그릴 수없는 이유를 알아 냈습니다.어떻게 안드로이드에서 캔버스에 인접한 비트 맵을 그립니까?
맥락에서 필자는 제공되는 오디오 데이터의 각 '창'에 대한 수직 비트 맵을 표시하여 사용자에게 주파수 히트 맵을 제공하는 스펙트로 그램 애플리케이션을 구축 중입니다. 지금은 미리 녹음 된 오디오를 사용하고 있기 때문에 모든 것을 표시해야하기 전에 모든 계산을 수행 할 수 있습니다. 정수 배열의 ArrayList가 있습니다. 각 배열은 하나의 창 비트 맵을 나타내며 타이머를 사용하여 캔버스에 그려집니다 실.
응용 프로그램이 화면의 크기를 초과하여 그릴 때 아래의 접근 방식이 궁극적으로 중단된다는 것을 알고 있습니다 만, 지금 당장 걱정할 필요가 없습니다. 내가 해결하고자하는 문제는 아래 코드가 그려진 비트 맵 사이에 하나의 픽셀 (ish) 갭을 생성한다는 것입니다. 실제로는 그 비트 맵이 절대적으로 인접 해있는 것이 좋을 때입니다.
이
내 타이머 스레드의 실행() 방법 :public void run() {
Canvas c = null;
try {
c = sh.lockCanvas(null);
synchronized(sh) {
doDraw(c);
}
} finally {
if (c!=null) {
sh.unlockCanvasAndPost(c);
}
}
}
이 비트 맵을 그리는 doDraw() 메소드이며, 다음 그리기 위해이 그려진 비트 맵의 말에 따라 생략 다음. 수직 창 그려야 할
private void doDraw(Canvas canvas) {
canvas.drawBitmap(spec.getBitmapWindow(windowsDrawn), 0, 1, windowsDrawn, 0, 1, h, false, null);
System.out.println("Windows drawn: "+windowsDrawn);
windowsDrawn++;
}
spec.getBitmapWindow(windowsDrawn)
단순히 화소 값의 정수 배열 결과 : 'windowsDrawn'필드를 증가시켜 그래서 간단히한다.
Here's a screenshot to show what I'm talking about. 이미지가 마치 작은 감옥 뒤에있는 것처럼 보이므로이 부분을 제거하고 싶습니다.
감사합니다.