마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

앨범or사진촬영해서 가져온 이미지를 DB에 저장하고싶어요...

0 추천

DB에 이미지를 넣을땐 uri 경로를 넣는ㄱㅓ까지는 알겠는데.. 제가 지금 사진을 앨범에서 혹은 촬영해서 

가져온 이미지를 화면에 보여주는거 까지는 성공을 했어요! 하지만.. 이렇게 선택된 이미지를 db에 어떻게 넣어야 하는지 모르겠네용 ㅠㅠㅠ 고수님들 제발 도와주세요 ㅠㅠ

사진 pick 하는 소스참조는 http://jeongchul.tistory.com/287  님 블로그에서 했습니다!! 

 

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(resultCode != RESULT_OK)
        return;

    switch(requestCode)
    {
        case PICK_FROM_ALBUM:
        {
            // 이후의 처리가 카메라와 같으므로 일단  break없이 진행합니다.
            // 실제 코드에서는 좀더 합리적인 방법을 선택하시기 바랍니다.
            mImageCaptureUri = data.getData();
            Log.d("SmartWheel", mImageCaptureUri.getPath().toString());
        }


        case PICK_FROM_CAMERA:
        {
            // 이미지를 가져온 이후의 리사이즈할 이미지 크기를 결정합니다.
            // 이후에 이미지 크롭 어플리케이션을 호출하게 됩니다.
            Intent intent = new Intent("com.android.camera.action.CROP");
            intent.setDataAndType(mImageCaptureUri, "image/*");


            // CROP할 이미지를 200*200 크기로 저장
            intent.putExtra("outputX", 200); // CROP한 이미지의 x축 크기
            intent.putExtra("outputY", 200); // CROP한 이미지의 y축 크기
            intent.putExtra("aspectX", 1); // CROP 박스의 X축 비율
            intent.putExtra("aspectY", 1); // CROP 박스의 Y축 비율
            intent.putExtra("scale", true);
            intent.putExtra("return-data", true);
            startActivityForResult(intent, CROP_FROM_iMAGE); // CROP_FROM_CAMERA case문 이동
            break;
        }
        case CROP_FROM_iMAGE:
        {
            // 크롭이 된 이후의 이미지를 넘겨 받습니다.
            // 이미지뷰에 이미지를 보여준다거나 부가적인 작업 이후에
            // 임시 파일을 삭제합니다.
            if(resultCode != RESULT_OK) {
                return;
            }


            final Bundle extras = data.getExtras();


            // CROP된 이미지를 저장하기 위한 FILE 경로
            String filePath = Environment.getExternalStorageDirectory().getAbsolutePath()+
                    "/SmartWheel/"+System.currentTimeMillis()+".jpg";


            if(extras != null)
            {
                Bitmap photo = extras.getParcelable("data"); // CROP된 BITMAP
                iv_UserPhoto.setImageBitmap(photo); // 레이아웃의 이미지칸에 CROP된 BITMAP을 보여줌


                storeCropImage(photo, filePath); // CROP된 이미지를 외부저장소, 앨범에 저장한다.
                absoultePath = filePath;
                break;


            }
            // 임시 파일 삭제
            File f = new File(mImageCaptureUri.getPath());
            if(f.exists())
            {
                f.delete();
            }
        }
    }



}
뚜루루루둡 (1,130 포인트) 님이 2016년 10월 31일 질문

1개의 답변

0 추천
 
채택된 답변
이미지를 DB에 넣는건 위험한 생각이 아닐까요..?

 

이미지를 서버로 전송하시고,

DB에는 그 이미지의 URL을 넣어주시면 되요~

그리고 imageview.set 으로 이미지를 넣으시는데 이건 사용하시다 보면 OOM으로 어플이 죽을거에요.

지금은 한개라서 크게 못느끼시는거지만 이미지를 여러개 만지시면 툭툭 죽어버릴겁니다.

glide 이라는 라이브러리 한번 사용해보세요~
방랑자 님이 2016년 11월 2일 답변
뚜루루루둡님이 2016년 11월 13일 채택됨
안녕하세요! 답변감사합니다 ! mImageCaptureUri 라는 uri를 .toString()으로 뽑아서 경로를 DB에 저장하는데는 성공하였는데요!
이제 이걸 cursorAdapter를 이용하여 DB에 저장된 경로를 가져오려하는데 혹시 어떻게 가져오는줄 아시나요...?ㅠㅠ
텍스트의 경우
 final TextView name = (TextView) view.findViewById(R.id.licensename);
 name.setText(cursor.getString(cursor.getColumnIndex("name")));

이런식으로 가져오는데 uri를 어떻게 가져와야할지 모르겠네용 ㅠㅠ
...