Android,사진 및 이미지 표시 효과 구현

본 논문 의 사례 는 안 드 로 이 드 사진 과 사진 에 표 시 된 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
1.기능 설명
카메라,NFC 등 외부 설정 을 사용 해 야 할 때 AndroidManifest.xml 에서 설명 해 야 합 니 다.
이렇게 하면 장치 가 이러한 외부 장치 가 부족 할 때 응용 상점 의 설치 프로그램 은 설 치 를 거부 할 수 있다.
설명 예제 코드 는 다음 과 같 습 니 다.

<uses-feature android:name="android.hardware.camera2"
    <!-- required false ,             -->
    <!--        ,       camera,        -->
    android:required="false"/>
2.파일 을 가리 키 는 File 대상 만 들 기
촬영 한 사진 은 장치 의 외부 저장 소 에 저장 할 수 있다.
Android 는 서로 다른 응용 프로그램 에 분 배 된 독특한 저장 영역 과 함께 데 이 터 를 저장 하 는 유형 에 따라 저장 영역 을 진일보 로 구분 했다.
사진 저장 영역 을 설정 하 는 코드 예 시 는 다음 과 같 습 니 다.

public File getPhotoFile(Crime crime) {
  //                  
  File externalFilesDir = mContext
      .getExternalFilesDir(Environment.DIRECTORY_PICTURES);

  if (externalFilesDir == null) {
    return null;
  }

  //       File  
  return new File(externalFilesDir, crime.getPhotoFilename());
}
.............
//  crime      
public String getPhotoFilename() {
  return "IMG_" + getId().toString() + ".jpg";
}
3.촉발 촬영
MediaStore.ACTION 사용 가능CAPTURE_IMAGE 형식의 Intent 트리거 사진,예제 코드 는 다음 과 같 습 니 다.

mPhotoButton = (ImageButton) v.findViewById(R.id.crime_camera);

//  Intent      
final Intent captureImageIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

//mPhotoFile               File
//             Intent   
boolean canTakePhoto = mPhotoFile != null
    && captureImageIntent.resolveActivity(packageManager) != null;
mPhotoButton.setEnabled(canTakePhoto);

if (canTakePhoto) {
  //  File     Uri  
  Uri uri = Uri.fromFile(mPhotoFile);

  // Uri     Intent ,               Uri     File 
  captureImageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
}

mPhotoButton.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    startActivityForResult(captureImageIntent, REQUEST_PHOTO);
  }
});
4.사진 처리 결과
사진 이 완성 되면 사진 을 불 러 올 수 있 습 니 다.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  .........
  } else if (requestCode == REQUEST_PHOTO) {
    updatePhotoView();
  }
  .........
}

private void updatePhotoView() {
  if (mPhotoFile == null || !mPhotoFile.exists()) {
    mPhotoView.setImageDrawable(null);
  } else {
    //          
    Bitmap bitmap = PictureUtils.getScaledBitmap(mPhotoFile.getPath(), getActivity());
    mPhotoView.setImageBitmap(bitmap);
  }
}
비트 맵 은 실제 픽 셀 데이터 만 저장 하기 때문에 원본 사진 이 압축 되 었 더 라 도 비트 맵 대상 에 저장 할 때 파일 이 압축 되 지 않 습 니 다.
따라서 그림 을 불 러 올 때 주어진 영역의 크기 에 따라 파일 을 합 리 적 으로 크기 조정 해 야 합 니 다.그리고 비트 맵 으로 크기 조정 한 파일 을 불 러 옵 니 다.예제 코드 는 다음 과 같 습 니 다.

//         ,           
//        ,         
public static Bitmap getScaledBitmap(String path, Activity activity) {
  Point size = new Point();
  activity.getWindowManager().getDefaultDisplay().getSize(size);

  return getScaledBitmap(path, size.x, size.y);
}

public static Bitmap getScaledBitmap(String path, int destWidth, int destHeight) {
  BitmapFactory.Options options = new BitmapFactory.Options();
  options.inJustDecodeBounds = true;

  //          
  BitmapFactory.decodeFile(path, options);

  //          
  float srcWidth = options.outWidth;
  float srcHeight = options.outHeight;

  //inSampleSize    /     
  //  ,inSampleSize 2 ,            , 2    1  
  //  ,          1/4
  int inSampleSize = 1;
  if (srcHeight > destHeight || srcWidth > destWidth) {
    if (srcWidth > srcHeight) {
      inSampleSize = Math.round(srcHeight / destHeight);
    } else {
      inSampleSize = Math.round(srcWidth / destWidth);
    }
   }

  options = new BitmapFactory.Options();
  options.inSampleSize = inSampleSize;

  //      ,      
  return BitmapFactory.decodeFile(path, options);
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기