2017-09-16 6 views
-1

저는 안드로이드 용 픽셀 게임을 만들고 있습니다. 32x32 이미지를 사용하고 있습니다. 화면 크기에 관계없이 게임을 동일하게 보이게하려면 동적으로 이미지의 크기를 조정하십시오. 내 문제까지 확장 할 때, 이미지의 어떤 부분이 자신의 원래 색상을 유지하지 않는다는 것입니다 : 원래 32 × 32작은 비트 맵 픽셀을 완벽하게 조정하십시오.

6 tiles, just before the black edges there is an unwanted shadowy line (presumably the average of the black and the redish color)

6 타일. 보시다시피, 검정색 가장자리 바로 앞에 원치 않는 그림자 선 (아마도 검은 색과 붉은 색의 평균)이 있습니다.

public abstract class Drawable { 
    protected int x; 
    protected int y; 
    protected Bitmap image; 

    Drawable(Bitmap image, int x, int y, float scale) { 
     this.x = x; 
     this.y = y; 
     this.image = Bitmap.createScaledBitmap(image, (int)(image.getWidth()*scale), (int)(image.getHeight()*scale), false); 
    } 

    abstract void draw(Canvas canvas); 
} 

당신은 내가 필터를 사용하고 있지 않다 볼 수 있듯이 :

이 내가 스케일링에 사용하는 코드입니다. 이렇게하면 가장자리 영역이 더 흐리게됩니다. 스케일 업이 실제로 이미지의 선명도를 유지할 때 true를 사용하는 것과는 대조적으로 다른 필터가 있습니까?

편집 : 지금 대신이 방법을 시도

:

scaledRect = new RectF(x, y, x+image.getWidth()*scale, y+image.getHeight()*scale); 
    paint = new Paint(); 
    paint.setAntiAlias(false); 
    paint.setDither(false); 
    paint.setFilterBitmap(false); 

그리고 그리기 요청에

: 성공하지

canvas.drawBitmap(this.image, null, scaledRect, paint); 

...

+0

까지 확장 비트 맵은 흐리게하는 부작용이 있습니다. 아마도 벡터 그래픽은 당신이 찾고있는 것입니다. https://developer.android.com/guide/topics/graphics/vector-drawable-resources.html –

+0

벡터 그래픽을 사용하여 픽셀 아트를 만드는 사람은 본 적이 없지만 직접 확인해 보겠습니다. –

답변

1

안드로이드 비트 맵을 처리 기본적으로 쌍 선형 보간 알고리즘으로 스케일링합니다. 당신이하려는 것은 가장 가까운 이웃 보간법입니다.

Paint을 확인 디더링 및 안티 앨리어싱을 해제 createScaledBitmap으로 그리지 않고 이것을 시도 :

paint.setDither(false); 
paint.setAntiAlias(false); 

canvas.drawBitmap(bitmap, null, new RectF(left, top, width, height), paint); 
+0

고마워요.하지만 여전히 같은 문제가 있습니다. –

+0

'paint.setFilterBitmap (false);'도 추가하십시오. – shiftpsh

+0

제 편집에서 볼 수 있듯이 저것을 사용했습니다. –