android中一些bitmap的简单处理
[1].[代码] [Java]代码 跳至 [1]
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
65
66
67
68
69
70
71
72
73
74
|
//根据指定的bitmap路径加载,并定义好了目标的大小
public
static
Bitmap decodeFile(String path,
int
dstWidth,
int
dstHeight) {
Options options =
new
Options();
options.inJustDecodeBounds =
true
;
BitmapFactory.decodeFile(path, options);
options.inJustDecodeBounds =
false
;
options.inSampleSize = calculateSampleSize(options.outWidth, options.outHeight, dstWidth,
dstHeight);
Bitmap unscaledBitmap = BitmapFactory.decodeFile(path, options);
return
unscaledBitmap;
}
/**
* 获得经过处理的bitmap
*/
public
static
Bitmap createScaledBitmap(Bitmap unscaledBitmap,
int
dstWidth,
int
dstHeight) {
Rect srcRect = calculateSrcRect(unscaledBitmap.getWidth(), unscaledBitmap.getHeight(),
dstWidth, dstHeight);
Rect dstRect = calculateDstRect(unscaledBitmap.getWidth(), unscaledBitmap.getHeight(),
dstWidth, dstHeight);
Bitmap scaledBitmap = Bitmap.createBitmap(dstRect.width(), dstRect.height(),
Config.ARGB_8888);
Canvas canvas =
new
Canvas(scaledBitmap);
canvas.drawBitmap(unscaledBitmap, srcRect, dstRect,
new
Paint(Paint.FILTER_BITMAP_FLAG));
return
scaledBitmap;
}
/**
* 计算Option的inSampleSize属性
*/
public
static
int
calculateSampleSize(
int
srcWidth,
int
srcHeight,
int
dstWidth,
int
dstHeight) {
final
float
srcAspect = (
float
) srcWidth / (
float
) srcHeight;
final
float
dstAspect = (
float
) dstWidth / (
float
) dstHeight;
if
(srcAspect > dstAspect) {
return
srcWidth / dstWidth;
}
else
{
return
srcHeight / dstHeight;
}
}
/**
* 计算源文件的Rect
*/
public
static
Rect calculateSrcRect(
int
srcWidth,
int
srcHeight,
int
dstWidth,
int
dstHeight) {
return
new
Rect(
0
,
0
, srcWidth, srcHeight);
}
/**
* 计算目标bitmap的rect区域
*/
public
static
Rect calculateDstRect(
int
srcWidth,
int
srcHeight,
int
dstWidth,
int
dstHeight) {
final
float
srcAspect = (
float
) srcWidth / (
float
) srcHeight;
final
float
dstAspect = (
float
) dstWidth / (
float
) dstHeight;
if
(srcAspect > dstAspect) {
return
new
Rect(
0
,
0
, dstWidth, (
int
) (dstWidth / srcAspect));
}
else
{
return
new
Rect(
0
,
0
, (
int
) (dstHeight * srcAspect), dstHeight);
}
}
/**
* View转化为BitMap
*/
public
static
Bitmap convertViewToBitmap(View view) {
view.measure(MeasureSpec.makeMeasureSpec(
0
, MeasureSpec.UNSPECIFIED),
MeasureSpec.makeMeasureSpec(
0
, MeasureSpec.UNSPECIFIED));
view.layout(
0
,
0
, view.getMeasuredWidth(), view.getMeasuredHeight());
view.buildDrawingCache();
Bitmap bitmap = view.getDrawingCache();
return
bitmap;
}
|