2012-01-25 7 views
0

Java Android에 AS3 (Flash) 응용 프로그램을 포팅합니다. 그리고이 프로토 타입에 상응하는 기능이 필요합니다 copyPixels (sourceBitmapData :의 BitmapData,으로서, sourceRect : 사각형, destPoint : 포인트, alphaBitmapData :의 BitmapData = NULL, alphaPoint : 포인트 = 널 (null),으로 mergeAlpha : 부울 = 거짓) : 공백을Java 비트 맵 합성 방법

중요한 매개 변수는 SourceBitmap, SourceRect, DestPoint 및 MergeAlpha입니다. 다른 매개 변수는 필요 없습니다. 지금은 Java에서 Bitmap 클래스를 사용하고 있습니다. Android Java 성능을 극적으로 빠르게 극복 할 수있는 Bitmap 클래스로 이러한 기능을 사용할 수 있습니까?

어쩌면 나는 BufferedImage 또는 다른 것을 사용해야 할 것이다. 그러나 자바는 많은 이미지/비트 맵을 가지고 있기 때문에 잃어버린다. AS3은 2를 가지고있는 동안 비슷한 임무를 수행하는 클래스이다. 내가 원하는 것을 찾지 못했다. Java Android의 성능 문제로 인해 피하려고하는 Canvas 클래스의 일부 형식을 사용하지 않아도됩니다. Bitmap 클래스에는 CopyPixels 함수가 있지만 알파 값을 합성하지 않는다고 이해합니다. 나는 내가하는 일을하고 내가 바퀴를 재발 명할 필요가 없기를 바라는 어딘가의 코드가 있다고 확신한다.

답변/의견을 보내 주셔서 감사합니다.

답변

1

android.graphics.Bitmap 클래스를 사용해야합니다. Android 캔버스는 실제로 매우 효율적입니다. 비트 맵에서 기본 그림을 그리는 데 사용할 수있는 래퍼입니다. 일부 OpenGL 예제를 살펴보면 Java에서 OpenGL보다 캔버스를 사용하여 드로잉이 더 빠릅니다. 성능 문제는 무엇입니까? 아마도 SO가 이러한 문제를 해결하는 데 도움이 될 수 있습니다.

또한 비트 맵의 ​​픽셀을 반복하고 색상을 혼합하여 직접 처리 할 수 ​​있습니다. 그다지 어렵지는 않지만 실제로 Canvas 클래스와 성능이 크게 다를 것은 없습니다.

+0

나는 이미 android.graphics.Bitmap을 사용하고있다. – user1169933

+0

필자는 Canvas가 OpenGl보다 빠르다고 생각하지만 Canvas를 합성 그래픽의 자리 표시 자로 사용하는 것이 느리다. 두 비트 맵을 모두 캔버스에 복사 한 다음 다시 비트 맵에 복사해야하기 때문입니다. 가능하면 알파 합성 (개별 픽셀이 아닌 버퍼로 작업)을 사용하여 비트 맵을 비트 맵으로 복사하는 것이 가장 좋은 해결책입니다. 성능 문제는 느린 프레임 속도, Java GC가 작동 할 때 전화 끊기, 화면 깜박임 등 ... 많은 픽셀을 푸시 할 때 C++에없는 문제 유형입니다. 댓글을 주셔서 감사합니다. 캔버스가 병목 현상이 아니라는 것을 아는 것이 유용합니다. – user1169933

+0

실제로 많은 것을 복사 할 필요는 없습니다. 비트 맵을 사용하는 Canvas 생성자를 사용하거나 SetBitmap()을 호출하십시오. 이것들은 비트 맵을 복사해서는 안됩니다. 비트 맵 픽셀을 변경해야합니다. 비트 맵을 복사하는 것은 무엇을 의미합니까? GC가 너무 오래 걸리는 이유는 무엇입니까? 매 프레임마다 비트 맵을 만들고 재활용하고 있습니까? – Samuel