2012-04-25 4 views
0

다음 코드를 사용하여 객체의 크기를 조절합니다. 지금은 sdcard에하는 스케일 이미지를 저장하려면, 제가 많이 검색 한 것으로 관한 있지만크기 조정 된 이미지를 sdcard에 저장합니다. android

public boolean onTouch(View v, MotionEvent event) { 
     ImageView view = (ImageView) v; 

     // Dump touch event to log 
     dumpEvent(event); 

     // Handle touch events here... 
     switch (event.getAction() & MotionEvent.ACTION_MASK) { 
     case MotionEvent.ACTION_DOWN: 
     savedMatrix.set(matrix); 
     start.set(event.getX(), event.getY()); 
     Log.d(TAG, "mode=DRAG"); 
     mode = DRAG; 
     break; 
     case MotionEvent.ACTION_POINTER_DOWN: 
     oldDist = spacing(event); 
     Log.d(TAG, "oldDist=" + oldDist); 
     if (oldDist > 10f) { 
      savedMatrix.set(matrix); 
      midPoint(mid, event); 
      mode = ZOOM; 
      Log.d(TAG, "mode=ZOOM"); 
     } 
     break; 
     case MotionEvent.ACTION_UP: 
     case MotionEvent.ACTION_POINTER_UP: 
     mode = NONE; 
     Log.d(TAG, "mode=NONE"); 
     break; 
     case MotionEvent.ACTION_MOVE: 
     if (mode == DRAG) { 
      // ... 
      matrix.set(savedMatrix); 
      matrix.postTranslate(event.getX() - start.x, 
        event.getY() - start.y); 
     } 
     else if (mode == ZOOM) { 
      float newDist = spacing(event); 
      Log.d(TAG, "newDist=" + newDist); 
      if (newDist > 10f) { 
       matrix.set(savedMatrix); 
       float scale = newDist/oldDist; 
       matrix.postScale(scale, scale, mid.x, mid.y); 
      } 
     } 
     break; 
     } 

     view.setImageMatrix(matrix); 
     return true; // indicate event was handled 
    } 
로그 캣보기에 이벤트를 표시/**

, 디버깅을 위해 */

를 찾을 수 없습니다 도와주세요
private void dumpEvent(MotionEvent event) { 
     String names[] = { "DOWN", "UP", "MOVE", "CANCEL", "OUTSIDE", 
      "POINTER_DOWN", "POINTER_UP", "7?", "8?", "9?" }; 
     StringBuilder sb = new StringBuilder(); 
     int action = event.getAction(); 
     int actionCode = action & MotionEvent.ACTION_MASK; 
     sb.append("event ACTION_").append(names[actionCode]); 
     if (actionCode == MotionEvent.ACTION_POINTER_DOWN 
      || actionCode == MotionEvent.ACTION_POINTER_UP) { 
     sb.append("(pid ").append(
       action >> MotionEvent.ACTION_POINTER_ID_SHIFT); 
     sb.append(")"); 
     } 
     sb.append("["); 
     for (int i = 0; i < event.getPointerCount(); i++) { 
     sb.append("#").append(i); 
     sb.append("(pid ").append(event.getPointerId(i)); 
     sb.append(")=").append((int) event.getX(i)); 
     sb.append(",").append((int) event.getY(i)); 
     if (i + 1 < event.getPointerCount()) 
      sb.append(";"); 
     } 
     sb.append("]"); 
     Log.d(TAG, sb.toString()); 
    } 

어떤 도움이 필요합니까? 사전

답변

1

감사는 당신이 뭔가를 할 수 있습니다 :

public void saveAsJpeg(View view, File file) { 
    view.setDrawingCacheEnabled(true); 
    view.measure(
     MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
     MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED) 
    ); 

    view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); 
    view.setVisibility(View.VISIBLE); 

    Bitmap _b = Bitmap.createBitmap(
     view.getMeasuredWidth(), 
     view.getMeasuredHeight(), 
     Bitmap.Config.ARGB_8888 
    ); 

    Canvas _c = new Canvas(_b); 
    view.draw(_c); 

    OutputStream _out = null; 
    try { 
     _out = new FileOutputStream(file); 
     _b.compress(Bitmap.CompressFormat.JPEG, 100, _out);    
    } finally { 
     _out.close(); 
    } 
} 

위 무겁게 오프 스크린 그려 비트 맵을 생성 내가 가진 몇 가지 작업 코드에서 수정됩니다. 나는 이 아니며은 위에 나온 형식으로 테스트했으며 사용자의 필요에 따라 실제로 필요한 것보다 많은 작업을 수행하고있을 수 있습니다.

다음과 같은 짧은 버전은, 당신을 위해 일 수 있음을 나에게 발생

하지만 나는 모든에서이 테스트를하지 않은 :

public void saveAsJpeg(View view, File file) { 
    view.setDrawingCacheEnabled(true); 
    Bitmap _b = view.getDrawingCache(); 
    OutputStream _out = null; 
    try { 
     _out = new FileOutputStream(file); 
     _b.compress(Bitmap.CompressFormat.JPEG, 100, _out);    
    } finally { 
     _out.close(); 
    } 
} 
0

당신은 그것을 할 수 있습니다,이 방법

private void saveImage(ImageView view, File file) throws IOException{ 
     //Before saving image, you need to create a scaled bitmap object 
     //which reflects the actual scaling, rotation, zoom, etc. in itself 
      Bitmap src=((BitmapDrawable)view.getDrawable()).getBitmap(); 
      Bitmap bm= Bitmap.createBitmap(src, 0,0, src.getWidth(), src.getHeight(), matrix, true); 

     //Then save this bitmap in a particular file. 
      OutputStream out = null; 
      try { 
      out = new FileOutputStream(file); 
      bm.compress(Bitmap.CompressFormat.PNG, 100, out);    
      } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      } finally { 
      out.close(); 
      } 
    } 

이것은 작업 코드입니다!