2011-12-08 4 views
1

를 비트 맵으로 사용자는 다른보기와 상호 작용을 수행합니다. 문제는 전체 이미지를 다시 볼 수있는 부분에만 반복해서 표시하고 싶지 않다는 것입니다. 그래서 사용자가 작업을 마친 후에 화면의 현재 VISIBLE 이미지를 메모리/비트 맵/캐시에 저장하고 다시 그리기 만하면됩니다.안드로이드 사용자 지정보기는 사용자가이 <code>canvas.rotate()</code>는 물론 이미지가 큰 등 <code>onDraw()</code><code>using canvas.translate()</code>에서 확인되고, 줌 등 이미지, 회전, 핀치를 조작하고 이미지의 조작 후 내 응용 프로그램에서

어떻게하면됩니까?

답변

1

먼저 나는 캔버스에 그리기, 다음, 내보기의 크기의 비트 맵을 만들고 그것을 캔버스를 만들어야합니다 그것을 저장하십시오.

public void saveScreenshot() { 
      Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); 
      Canvas canvas = new Canvas(bitmap); 
      canvas.draw(myGiganticImage) 

      File file = new File(context.getFilesDir() + "/cache.jpg"); 
      FileOutputStream fos; 
      try { 
       fos = new FileOutputStream(file); 
       bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fos); 
       fos.close(); 

       cachedBackground = BitmapFactory.decodeFile(context.getFilesDir() + "/cache.jpg" 
       invalidate()     
      } catch (FileNotFoundException e) { 
      } catch (IOException e) { 
      } 
     } 

나는 필요할 때 이것을 onDraw()에서 간단히 호출합니다. 그것은 큰 그림 대신 그리기 위해 사용할 수있는 내부 메모리에 비트 맵을 저장합니다.

+1

myGiganticImage 란 무엇입니까? – Siddhesh

3

사용자 지정보기의 생성자에서 그림 캐시를 setDrawingCacheEnabled(true);과 같이 사용하도록 설정합니다. 그런 다음 Canvas의 상태를 저장하려면 getDrawingCache()으로 전화하여 원하는 Bitmap을 반환 할 수 있습니다.

문서 : getDrawingCache()

+0

당신은 여기에 답변이 있지만 unfortunatelly 내가 이미지 작업을하고 있다고 생각하고 buildDrawingCache가 화면보다 크면 뷰의 보이는 부분 만 그려지고 캐시는 오직 보유하고있는 것처럼 보입니다 무엇이 그려져 있습니까? 이것을 고치는 방법은 무엇입니까? 내보기가 화면보다 큰 반면 보이는 화면 만 캐시해야합니다 ... – Alin

+0

첫 번째 문장은 완전히 명확하지 않습니다. 그리고이 상황에서 그려지는 것과 볼 수있는 것의 차이점을 명확히 할 수 있습니까? – Thomas

+0

뷰의 내용을 캐시 할 수 있으려면 뷰가 화면 크기보다 커서는 안됩니다. 따라서 800x480 화면의 사용자 정의보기에서 2000x1000 픽셀 이미지로 작업하면보기를 캐시 할 수 없습니다. 테스트를했는데 캐시 된 비트 맵이 비어 있습니다. 아니면 뭔가 빠졌나요? – Alin

0

당신을 도울 수 있습니다 다음은

(1)

View v = view.getRootView(); 
    v.setDrawingCacheEnabled(true); 
    Bitmap b = v.getDrawingCache(); 

(2)How to capture the android device screen content?

또 다른 질문에 대한 유사하다 (3)이 라이브러리를 사용해 볼 수 있습니다 http://code.google.com/p/android-screenshot-library/ 루트 액세스 권한없이 Android 장치에서 스크린 샷을 프로그래밍 방식으로 캡처 할 수있는 Android 스크린 샷 라이브러리 (ASL)를 소개합니다.

+0

(1)이 코드를 어디에서 실행해야합니까? 내 활동에?그렇다면 다른 요소를 그리기 직전에 onDraw 내부에서 getDrawingCache()를 요청해야하므로 내 요구에 적합하지 않습니다. 그리고 이것은 이전에 설명한대로 작동하지 않을 것입니다. (2)와 (3) 장치 부팅시 일부 서비스가 있기 때문에 라이브러리를 사용하고 싶지 않습니다. 도와 줘서 고마워. – Alin

1

당신의 무승부에서 비트 맵으로 캔버스를 초기화하십시오. 이 비트 맵의 ​​참조를 유지하고 필요할 때마다 저장하십시오.

내가 분명히 일을 kepp하기

HERE 필요 것에 대해 정말 좋은 기사를 발견했습니다