Today's

길을 나서지 않으면 그 길에서 만날 수 있는 사람을 만날 수 없다

모바일 앱(안드로이드)

안드로이드 앱 만들기 갤러리 에서 이미지 받아오기 (자동회전 방지)

Billcorea 2021. 7. 22. 23:07
반응형

앱을 만들다가... 갤러리에서 이미지 받아오는 와서 사용하는 것을 구현하고 있는 중인데...

사진이 돌아간다. 흑~ 그래서 구글링 신에서 질문을 했다...

답... Exif 을 구현해서 사진을 돌리는 코드가 나오고... 

그것 보다는 조금 간결한 코드 구현 방법이 보인다.

http://bumptech.github.io/glide/doc/getting-started.html

 

Glide v4 : Getting Started

Basic Usage Loading images with Glide is easy and in many cases requires only a single line: Glide.with(fragment) .load(myUrl) .into(imageView); Cancelling loads you no longer need is simple too: Glide.with(fragment).clear(imageView); Although it’s good

bumptech.github.io

glide 이건 뭔가 ???  쉬운 이미지 처리 방법 

 

백그라운드 스레드
배경 스레드에 이미지를 로드하는 것도 submit(int, int)다음을 사용하여 간단합니다 .

FutureTarget<Bitmap> futureTarget =
  Glide.with(context)
    .asBitmap()
    .load(url)
    .submit(width, height);

Bitmap bitmap = futureTarget.get();

이렇게 설명된 부분을 참조 하면 될 것 같다. 또 하나 방법은 바로 imageView 에 넣는 방법인데...  

알고 싶은 건 Bitmap 에 값을 넣는 것이니... 그런데... 백그라운드 스레드로 해야 한다는 부분을 주의 해야 했다.

그래서 아래 처럼 코딩해서 해소 끝...

            FutureTarget<Bitmap> futureTarget =
                    Glide.with(getApplicationContext())
                            .asBitmap()
                            .load(photoUri)
                            .submit(width, height);

            Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {

                    try {
                        Bitmap bitmap = futureTarget.get();

                        GroupImageBean bean1 = new GroupImageBean();
                        bean1.setImageGrpId(groupName);
                        bean1.setImageData(bitmap);
                        bean1.setOriginalUri(photoUri);
                        bean1.setImageUri(photoUri);
                        bitmapArrayList.add(bean1);

                        dbHandler = DBHandler.open(SetGroupActivity.this);
                        dbHandler.insertImage(bean1);
                        dbHandler.close();

                        getAdapterUpdateReceiptsList();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                }
            }, 660);

 

다음에 또 이런걸 하게 될 지 모르지만... 

 

아래 코드는 갤러리에서 사진 선택할 수 있도록 호출 하기 위한 코드 ...

 

                Intent intent = new Intent();
                intent.setType("image/*");
                intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true) // 이건 동시에 여러장 선택
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(intent, REQUEST_CODE);

저렇게 호출하면 그걸 받아서 처리하는 부분은 

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if(requestCode == REQUEST_CODE)
        {
            if(resultCode == RESULT_OK)
            {
                try{
                    InputStream in = getContentResolver().openInputStream(data.getData());

                    Bitmap img = BitmapFactory.decodeStream(in);
                    in.close();

                    imageView.setImageBitmap(img);
                }catch(Exception e)
                {

                }
            }
            else if(resultCode == RESULT_CANCELED)
            {
                Toast.makeText(this, "사진 선택 취소", Toast.LENGTH_LONG).show();
            }
        }
    }

이렇게 activity 호출 결과를 받아서 처리하면 됨...

오늘 도 즐~~~ 코딩...

반응형