안녕하세요 오늘은 URL과 DECODE에 대해서 알아보겟습니다.
[참고 자료] 아래 스틱코드 링크를 참고하세요
https://stickode.com/detail.html?no=2399
1. URL
URL은 Uniform Resource Locator의 약자인데 쉽게 말하면 자원의 위치를 뜻합니다.
예를 들어 “103호 에서 물병을 가져와” 라는 명령이 있다면 물병의 위치가 103호에 있다는 것을 먼저 알아야 하듯이
인터넷상에 있는 어떤 이미지를 가져오고 싶을 때 그 이미지가 있는 위치를 알아야 겠죠?
그 위치값을 url로 표현하는 것입니다.
URL url = new URL(img_url);
2. BitmapFactory
그런데 이미지를 가져온 후에 사용하는 BitmapFactory는 무엇일까요?
BitmapFactory 클래스의 정의는 다음과 같습니다.
Creates Bitmap objects from various sources, including files, streams, and byte-arrays.
어떤 자원을 비트맵으로 만들어주는 공장인 것이죠.
이 BitmapFactory 의 여러 옵션 중에서 decodeStream 이 있습니다.
bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
3. DECODE
decode는 코드를 원래 상태로 되돌리는 것입니다. 다시 말해서 코드화 된 어떤 정보를 다시 되돌리는 것인데 이전에 코드화 시킨 것을 encoding 했다고 말합니다.
접두사 de-의 뜻이 not 인 것을 알면 더 잘 이해가 되시겠죠?
그렇다면 Stream은 무엇일까요?
Stream은 여러 데이터 조각들이 물 흐르듯 모여 있는 것으로 생각하면 좋을 것 같습니다.
public class MainActivity extends AppCompatActivity {
ImageView iv_image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv_image = findViewById(R.id.imageView1);
new DownloadFilesTask().execute("https://www.shutterstock.com/ko/blog/wp-content/uploads/sites/17/2017/12/shutterstock_116222914.jpg?w=760&h=492");
}
private class DownloadFilesTask extends AsyncTask<String,Void, Bitmap> {
@Override
protected Bitmap doInBackground(String... strings) {
Bitmap bmp = null;
try {
String img_url = strings[0]; //url of the image
URL url = new URL(img_url);
bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bmp;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(Bitmap result) {
// doInBackground 에서 받아온 total 값 사용 장소
iv_image.setImageBitmap(result);
}
}
}
정리하자면
안드로이드에서 웹상의 이미지를 가져올 수 있었던 원리는
특정 URL에 위치한 어떤 이미지가 여러 데이터 조각들로 이루어져 있는데
그것을 비트맵으로 디코딩하였고
그 결과값을 setImageBitmap 함수에 넣어서 화면에 나타나게 해 줄 수 있는 것입니다.
'안드로이드 자바' 카테고리의 다른 글
[JAVA][Android] 막대 그래프 만들기 (0) | 2022.02.22 |
---|---|
[JAVA][Android] 키보드 보이기/숨기기 (0) | 2022.02.20 |
[JAVA][Android] Intent로 객체 전달하기. (0) | 2022.02.16 |
[JAVA][Android] 이미지 넘겨보기 (0) | 2022.02.14 |
[JAVA][Android] 안드로이드 Lottie 사용법 (0) | 2022.02.13 |