1、倒影:
/**
* @param imgId 图片资源id
* @return Bitmap 带倒影的Bitmap
*/
private Bitmap createReflectedBitmapTest(Context context, int imgId){
Bitmap originalImage = BitmapFactory.decodeResource(context.getResources(), imgId);
// 反射图片和原始图片中间的间距
final int reflectionGap = 4;
int width = originalImage.getWidth();
int height = originalImage.getHeight();
//通过矩阵对图像进行变换
Matrix matrix = new Matrix();
// 第一个参数为1,表示x方向上以原比例为准保持不变,正数表示方向不变。
// 第二个参数为-1,表示y方向上以原比例为准保持不变,负数表示方向取反。
matrix.preScale(1, -1); // 实现图片的反转
// 创建反转后的图片Bitmap对象,图片高是原图的一半
Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0,
height / 2, width, height / 2, matrix, false);
// 创建标准的Bitmap对象,宽和原图一致,高是原图的1.5倍
Bitmap bitmapWithReflection = Bitmap.createBitmap(width,
(height + height / 2), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmapWithReflection);
canvas.drawBitmap(originalImage, 0, 0, null);
Paint deafaultPaint = new Paint();
canvas.drawRect(0, height, width, height + reflectionGap, deafaultPaint);
// 将反转后的图片画到画布中
canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);
Paint paint = new Paint();
// 创建线性渐变LinearGradient 对象。
LinearGradient shader = new LinearGradient(0, originalImage
.getHeight(), 0, bitmapWithReflection.getHeight()
+ reflectionGap, 0x70ffffff, 0x00ffffff, Shader.TileMode.MIRROR);
paint.setShader(shader);
// 倒影遮罩效果
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()
+ reflectionGap, paint);
return bitmapWithReflection;
}
/**
* @param imgId 图片资源id
* @return Bitmap 只返回倒影的Bitmap
*/
private Bitmap createReflectedBitmap(Context context, int imgId){
Bitmap originalBitmap = BitmapFactory.decodeResource(context.getResources(), imgId);
return createReflectedBitmap(context , originalBitmap);
}
public Bitmap createReflectedBitmap(Context context, Bitmap originalBitmap) {
int width = originalBitmap.getWidth();
int height = originalBitmap.getHeight();
//通过矩阵对图像进行变换
Matrix matrix = new Matrix();
// 第一个参数为1,表示x方向上以原比例为准保持不变,正数表示方向不变。
// 第二个参数为-1,表示y方向上以原比例为准保持不变,负数表示方向取反。
matrix.preScale(1, -1); // 实现图片的反转
// 创建反转后的图片Bitmap对象,图片高是原图的一半
Bitmap reflectionImage = Bitmap.createBitmap(originalBitmap, 0,
height / 2, width, height / 2, matrix, false);
Canvas canvas = new Canvas(reflectionImage);
Paint paint = new Paint();
// 创建线性渐变LinearGradient 对象。
LinearGradient shader = new LinearGradient(0, 0, 0, height / 2, 0x70ffffff, 0x00ffffff, Shader.TileMode.MIRROR);
paint.setShader(shader);
// 倒影遮罩效果
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
canvas.drawRect(0, 0, width, height / 2, paint);
return reflectionImage;
}
// 使用:
Bitmap bitmapR = createReflectedBitmap(getContext(),bitmap);
2、获取音乐的专辑图片
/**
* 获取音频缩略图Bitmap
* @param path 音频路径
* @return
*/
public Bitmap coverPicture(String path) {
Bitmap bitmap = null;
try {
MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource(path);
final byte[] coverImage = mediaMetadataRetriever.getEmbeddedPicture();
if (coverImage != null) {
bitmap = BitmapFactory.decodeByteArray(coverImage, 0, coverImage.length);
}
} catch (Throwable e) {
e.printStackTrace();
}
return bitmap;
}