2012-02-07 5 views
0

이 코드를 사용하여 비트 맵을 그리면 캔버스에 그림이 그려집니다.안드로이드 : 캔버스에 비트 맵을 그리는 동안 이미지 해상도 문제가 발생했습니다.

코드 1 :

photoBitmap = Bitmap.createScaledBitmap(tempBitmap, display.getWidth(), display.getHeight(), true); // original 

하지만 난 다음 stratched 점점이 아닌 비트 맵 비트 맵을 그리는 코드 아래 사용하지만 난 단지 이미지의 왼쪽 위 모서리의 일부분을 받고 있어요합니다.

CODE2 :

이제
photoBitmap = Bitmap.createBitmap(tempBitmap); 

, 두 코드는 생성/비트 맵을 얻기위한 것입니다 위. 그리고 난 코드 아래 사용 캔버스에 비트 맵 그리려면 지금

canvas.drawBitmap (photoBitmap,0, 0, null);// Original Without ImageView 

, 내가 전체 이미지를보고하기 위해 무엇을해야하고 그것은 스트레칭 종류를 얻을 것이다.

감사합니다.

+0

tempBitmap이 원본 비트 맵이면 캔버스에서 스트레칭하면 안됩니다. 원본 이미지에서 비트 맵 크기를 조정하십시오. –

+0

@Hiren Dabhi : 두 번째 코드를 사용하면 stratch가 발생하지 않지만 카메라에서 이미지를 가져 오는 중입니다. 그래서 원본 이미지 높이 - 너비가 장치 높이 - 너비보다 큽니다. 왜 내가 이미지의 일부분 만 가져 왔는지 알 수 있습니다. 그래서 내가 뭘해야합니까 ??? 나는 전체적인 이미지를 원하지만 상처를 받아서는 안된다. –

+0

나는 "stratch"라는 단어가 정말로 "stretch"라고 생각합니다. 맞습니까? 그래서 너비와 높이가 같은 비율로 스크린에 적응하기 위해 비트 맵의 ​​크기를 조정하고 싶습니까? – Huang

답변

1

당신이해야 할 일은 디스플레이에 맞는 양방향으로 비트 맵을 동일하게 늘리는 것입니다. 이것을 시도하십시오 :

 float xscale = (float)display.getWidth()/(float)tempBitmap.getWidth(); 
     float yscale = (float)display.getHeight()/(float)tempBitmap.getHeight(); 
     if (xscale > yscale) // make sure both dimensions fit (use the smaller scale) 
      xscale = yscale; 
     float newx = (float)tempBitmap.getWidth() * xscale; 
     float newy = (float)tempBitmap.getHeight() * xscale; // use the same scale for both dimensions 
     // if you want it centered on the display (black borders) 
     float borderx = ((float)display.getWidth() - newx)/2.0; 
     float bordery = ((float)display.getHeight() - newy)/2.0; 
     photoBitmap = Bitmap.createScaledBitmap(tempBitmap, newx, newy, true); 

     // your drawing code will now look like this 
     canvas.drawBitmap (photoBitmap, borderx, bordery, null); 
관련 문제