티스토리 뷰
[Android]Picasso 블러 - Blur 적용하기 ( Transform )
android Blur effect example Using the image loader library Picasso
이미지 로드 라이브러리 Picasso를 안드로이드에 적용하기
아래의 포스팅에서 라이브러리 적용하는 방법과 간단히 사용하는 방법이 있다.
▷ [Android] 이미지 로드 라이브러리 Picasso 사용하기 참조
Android Renderscript 라이브러리를 Blur 사용하기
1. Renderscript 사용 제한
▷ Android SDK Tools revision 22.2 or higher -- SDK툴 버전이 22.2 버전이상 사용하고
▷ Android SDK Build-tools revision 18.1.0 or higher -- 안드로이드 SDK 빌드 툴 버전은 18.1.0 버전이상 사용한다면 Renderscript를 사용할 수 있다.
2. Build.gradle 설정
아래는 예제로 작성한 안드로이드 앱의 build.gradle 파일이다.
Blur 를 사용하기 위해 Renderscript 옵션을 추가하였다..
빨간색 글씨를 추가하면 될 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.packagename"
minSdkVersion 19
targetSdkVersion 23
versionCode 1
versionName "1.0"
renderscriptTargetApi 19
renderscriptSupportModeEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:support-v4:23.4.0'
compile 'com.android.support:design:23.4.0'
compile 'com.squareup.picasso:picasso:2.5.2'
}
|
cs |
3. RenderScript의 Blur 작성하기
RenderScriptBlur.java
아래는 Bitmap 파일을 Blur 처리 할 수 있기 때문에 Picasso적용만을 위한 것은 아니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
public class RenderScriptBlur {
public static Bitmap blur(Context context, Bitmap targetBitmap, int radius) throws RSRuntimeException {
RenderScript renderScript = null;
try {
renderScript = RenderScript.create(context);
Allocation input = Allocation.createFromBitmap(renderScript, targetBitmap,
Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT);
Allocation output = Allocation.createTyped(renderScript, input.getType());
ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript));
blur.setInput(input);
blur.setRadius((radius > 25 ? 25 : radius));
blur.forEach(output);
output.copyTo(targetBitmap);
} finally {
if (renderScript != null) {
renderScript.destroy();
}
}
return targetBitmap;
}
}
|
cs |
4. Picasso의 Transformation Blur 작성하기
BlurTransformation.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
public class BlurTransformation implements Transformation {
private static int MAX_RADIUS = 25;
private static int DEFAULT_DOWN_SAMPLING = 1;
private Context mContext;
private int mRadius;
private int mSampling;
public BlurTransformation(Context context) {
this(context, MAX_RADIUS, DEFAULT_DOWN_SAMPLING);
}
public BlurTransformation(Context context, int radius) {
this(context, radius, DEFAULT_DOWN_SAMPLING);
}
public BlurTransformation(Context context, int radius, int sampling) {
mContext = context.getApplicationContext();
mRadius = radius;
if (mRadius > 25) {
mRadius = 25;
} else if (mRadius <= 0) {
mRadius = 1;
}
mSampling = sampling;
}
@Override
public Bitmap transform(Bitmap source) {
int scaledWidth = source.getWidth() / mSampling;
int scaledHeight = source.getHeight() / mSampling;
Bitmap bitmap = Bitmap.createBitmap(scaledWidth, scaledHeight, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.scale(1 / (float) mSampling, 1 / (float) mSampling);
Paint paint = new Paint();
paint.setFlags(Paint.FILTER_BITMAP_FLAG);
canvas.drawBitmap(source, 0, 0, paint);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
try {
bitmap = RenderScriptBlur.blur(mContext, bitmap, mRadius);
} catch (RSRuntimeException e) {
}
} else {
}
source.recycle();
return bitmap;
}
@Override
public String key() {
return "BlurTransformation(radius=" + mRadius + ", sampling=" + mSampling + ")";
}
}
|
cs |
Picasso 적용하기
1
2
3
4
5
|
Picasso.with(this)
.load("http://kaboompics.com/files/upload/o_19v85jk82r7a1ibk1b1r189j1atq7_new.jpg")
.transform(new BlurTransformation(this, 25))
.into(picassoImageView);
|
cs |
결과화면
>> 블러 효과 없을때
>> 블러 Radius 25
'Dev > Android' 카테고리의 다른 글
[Android/Tip] Android 자동 생성(Generate) - 싱글톤 / Getter / Setter / Constructor / toString (0) | 2018.07.13 |
---|---|
[Android] 안드로이드 QR코드 적용하기 - zxing-android-embedded (3) | 2018.07.13 |
[Android] Seekbar 커스텀하기 - Thumb 크기 바꾸기 (0) | 2016.11.09 |
[Android] 줄자 - Ruler Selector View (SeekerView / 선택자 / 자모양 / 값 선택 뷰 / Ruler Type Number Picker ) (7) | 2016.11.07 |
[Android] APK 파일 추출 / 디컴파일 / 분석 하기 (6) | 2016.09.20 |
- Total
- Today
- Yesterday
- library
- java
- Android Studio
- Android
- 라멘
- 라면
- 후쿠오카
- 직화
- 하카타
- 돈돈
- 컵라면
- 일본
- 에러
- 인스턴트
- Python
- 설치
- 맛집
- 안드로이드 스튜디오
- 안드로이드
- 일식
- 예제
- 편의점
- jar
- MongoDB
- Custom
- Picasso
- 생성
- GS25
- Android Stuido
- 리뷰
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |