2012-10-29 3 views
3

내 프로그램에는 이미지와 색상을 가져 와서 해당 이미지의 모든 픽셀을 해당 색으로 바꿔 각 픽셀의 투명도를 유지해야하는 메서드가 있습니다.ColorMatrixColorFilter libgdx의 범위

전체 이미지를 검토하고 각 픽셀을 개별적으로 변경하기 위해 중첩 루프를 사용하지 않고도 ColorMatrixColorFilter을 사용하여 Android에서 쉽게 수행 할 수 있습니다. 이는 상당히 느립니다.

그러나 최근 libgdx로 전환하기로 결정 했으므로 ColorMatrixColorFilter을 사용할 수 없습니다. libgdx에는 각 픽셀을 수동으로 변경하지 않고도 비슷한 작업을 수행하는 클래스가 있습니까?

답변

2

이 작업을 수행하는 가장 좋은 방법은 흰색 픽셀 만 사용하여 텍스처를 사용하는 것입니다.이 텍스처는 SpriteBatch.setColor(r,g,b,a)으로 그려지기 전에 색을 입히고 다시 Color.WHITE으로 설정하면됩니다.

텍스처를 픽셀 단위로 변환하려면 일시 중지해야 할뿐만 아니라 텍스처의 자체 파일에 텍스처를 설정할 필요가 없지만 모든 텍스처와 동일한 TextureAtlas에 넣을 수 있다는 것이 가장 큰 이점입니다 착색되지 않은 다른 질감들. 텍스처의 다른 색상 버전을 바인딩 할 필요가 없기 때문에 SpriteBatch은 렌더링 호출이 훨씬 적어 지므로 렌더링 속도가 빨라집니다.

1

http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/Sprite.html#setColor(com.badlogic.gdx.graphics.Color setColor();

사실 저는 각 픽셀을 직접 조작하며 그렇게 나쁘지 않습니다. 시도 해봐야합니다.

+0

그래, 그 방법은 현재하고 있지만 눈에 띄는 일시 중지가 발생합니다. 실제로 필요한 때까지 특정 색상의 텍스처를로드하지 않기 때문에 (즉, 컬러 버전의 텍스처가 즉시로드됩니다.) –

+1

또한, 약간의 접선이지만'Pixmap.getColor()'메서드는 기이하게 동작하는 것처럼 보입니다. 문서에서는 RGBA8888 값을 반환하지만,'FileHandle'에서'Pixmap'을 만들면'getColor()'값은 RGBA8888이 아니지만 모든 곳 (-256?)에 있습니다. 만약 RGBA8888을 사용하여 새로운'Pixmap'을 생성한다면, 첫 번째 Pixmap을 두번째 Pixmap으로 그리고 나서'getColor()'는 0-255 사이의 값만을 반환하고, 알파와 일치합니다. 나는 이것을 사용하여'setColor()'를 사용하여 세번째 Pixmap을 그린다. –