ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android应用--简、美音乐播放器实现专辑倒影效果,androidstudio设置ndk版本

2022-01-24 14:03:15  阅读:257  来源: 互联网

标签:src ndk paint -- bitmap int androidstudio new Bitmap


5、获取音乐专辑封面并显示到界面上

今天要实现的功能是实现专辑倒影效果,这个功能已经属于图像处理方面的了,对图像处理小巫不怎么在行,等一下会介绍一个很实用的工具类,专门用来进行图像处理的。这个工具类不是我写的,我只是拿来用到自己的项目当中,这已经足够了,我已经完美实现我想要的效果。

效果图:

一个很有用的工具类

/SimpleBeautyMusicPlayer/src/com/wwj/sb/utils/ImageUtil.java

package com.wwj.sb.utils;

import java.io.ByteArrayOutputSt
ream;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.Bitmap.CompressFormat;

import android.graphics.Bitmap.Config;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.ColorMatrix;

import android.graphics.ColorMatrixColorFilter;

import android.graphics.LinearGradient;

import android.graphics.Matrix;

import android.graphics.Paint;

import android.graphics.PorterDuff;

import android.graphics.PorterDuff.Mode;

import android.graphics.PorterDuffXfermode;

import android.graphics.Rect;

import android.graphics.RectF;

import android.graphics.Shader;

import android.graphics.drawable.BitmapDrawable;

import android.graphics.drawable.Drawable;

/**

  • 图片工具类

  • @author wwj

  • 2013/7/3

*/

public class ImageUtil {

/图片的八个位置/

public static final int TOP = 0; //上

public static final int BOTTOM = 1; //下

public static final int LEFT = 2; //左

public static final int RIGHT = 3; //右

public static final int LEFT_TOP = 4; //左上

public static final int LEFT_BOTTOM = 5; //左下

public static final int RIGHT_TOP = 6; //右上

public static final int RIGHT_BOTTOM = 7; //右下

/**

  • 图像的放大缩小方法

  • @param src 源位图对象

  • @param scaleX 宽度比例系数

  • @param scaleY 高度比例系数

  • @return 返回位图对象

*/

public static Bitmap zoomBitmap(Bitmap src, float scaleX, float scaleY) {

Matrix matrix = new Matrix();

matrix.setScale(scaleX, scaleY);

Bitmap t_bitmap = Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true);

return t_bitmap;

}

/**

  • 图像放大缩小–根据宽度和高度

  • @param src

  • @param width

  • @param height

  • @return

*/

public static Bitmap zoomBimtap(Bitmap src, int width, int height) {

return Bitmap.createScaledBitmap(src, width, height, true);

}

/**

  • 将Drawable转为Bitmap对象

  • @param drawable

  • @return

*/

public static Bitmap drawableToBitmap(Drawable drawable) {

return ((BitmapDrawable)drawable).getBitmap();

}

/**

  • 将Bitmap转换为Drawable对象

  • @param bitmap

  • @return

*/

public static Drawable bitmapToDrawable(Bitmap bitmap) {

Drawable drawable = new BitmapDrawable(bitmap);

return drawable;

}

/**

  • Bitmap转byte[]

  • @param bitmap

  • @return

*/

public static byte[] bitmapToByte(Bitmap bitmap) {

ByteArrayOutputStream out = new ByteArrayOutputStream();

bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);

return out.toByteArray();

}

/**

  • byte[]转Bitmap

  • @param data

  • @return

*/

public static Bitmap byteToBitmap(byte[] data) {

if(data.length != 0) {

return BitmapFactory.decodeByteArray(data, 0, data.length);

}

return null;

}

/**

  • 绘制带圆角的图像

  • @param src

  • @param radius

  • @return

*/

public static Bitmap createRoundedCornerBitmap(Bitmap src, int radius) {

final int w = src.getWidth();

final int h = src.getHeight();

// 高清量32位图

Bitmap bitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888);

Paint paint = new Paint();

Canvas canvas = new Canvas(bitmap);

canvas.drawARGB(0, 0, 0, 0);

paint.setColor(0xff424242);

// 防止边缘的锯齿

paint.setFilterBitmap(true);

Rect rect = new Rect(0, 0, w, h);

RectF rectf = new RectF(rect);

// 绘制带圆角的矩形

canvas.drawRoundRect(rectf, radius, radius, paint);

// 取两层绘制交集,显示上层

paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));

// 绘制图像

canvas.drawBitmap(src, rect, rect, paint);

return bitmap;

}

/**

  • 创建选中带提示图片

  • @param context

  • @param srcId

  • @param tipId

  • @return

*/

public static Drawable createSelectedTip(Context context, int srcId, int tipId) {

Bitmap src = BitmapFactory.decodeResource(context.getResources(), srcId);

Bitmap tip = BitmapFactory.decodeResource(context.getResources(), tipId);

final int w = src.getWidth();

final int h = src.getHeight();

Bitmap bitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888);

Paint paint = new Paint();

Canvas canvas = new Canvas(bitmap);

//绘制原图

canvas.drawBitmap(src, 0, 0, paint);

//绘制提示图片

canvas.drawBitmap(tip, (w - tip.getWidth()), 0, paint);

return bitmapToDrawable(bitmap);

}

/**

  • 带倒影的图像

  • @param src

  • @return

*/

public static Bitmap createReflectionBitmap(Bitmap src) {

// 两个图像间的空隙

final int spacing = 4;

final int w = src.getWidth();

final int h = src.getHeight();

// 绘制高质量32位图

Bitmap bitmap = Bitmap.createBitmap(w, h + h / 2 + spacing, Config.ARGB_8888);

// 创建燕X轴的倒影图像

Matrix m = new Matrix();

m.setScale(1, -1);

Bitmap t_bitmap = Bitmap.createBitmap(src, 0, h / 2, w, h / 2, m, true);

Canvas canvas = new Canvas(bitmap);

Paint paint = new Paint();

// 绘制原图像

canvas.drawBitmap(src, 0, 0, paint);

// 绘制倒影图像

canvas.drawBitmap(t_bitmap, 0, h + spacing, paint);

// 线性渲染-沿Y轴高到低渲染

Shader shader = new LinearGradient(0, h + spacing, 0, h + spacing + h / 2, 0x70ffffff, 0x00ffffff, Shader.TileMode.MIRROR);

paint.setShader(shader);

// 取两层绘制交集,显示下层。

paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));

// 绘制渲染倒影的矩形

canvas.drawRect(0, h + spacing, w, h + h / 2 + spacing, paint);

return bitmap;

}

/**

  • 独立的倒影图像

  • @param src

  • @return

*/

public static Bitmap createReflectionBitmapForSingle(Bitmap src) {

final int w = src.getWidth();

final int h = src.getHeight();

// 绘制高质量32位图

Bitmap bitmap = Bitmap.createBitmap(w, h / 2, Config.ARGB_8888);

// 创建沿X轴的倒影图像

Matrix m = new Matrix();

m.setScale(1, -1);

Bitmap t_bitmap = Bitmap.createBitmap(src, 0, h / 2, w, h / 2, m, true);

Canvas canvas = new Canvas(bitmap);

Paint paint = new Paint();

// 绘制倒影图像

canvas.drawBitmap(t_bitmap, 0, 0, paint);

// 线性渲染-沿Y轴高到低渲染

Shader shader = new LinearGradient(0, 0, 0, h / 2, 0x70ffffff,

0x00ffffff, Shader.TileMode.MIRROR);

paint.setShader(shader);

// 取两层绘制交集。显示下层。

paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));

// 绘制渲染倒影的矩形

canvas.drawRect(0, 0, w, h / 2, paint);

return bitmap;

}

public static Bitmap createGreyBitmap(Bitmap src) {

final int w = src.getWidth();

final int h = src.getHeight();

Bitmap bitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888);

Canvas canvas = new Canvas(bitmap);

Paint paint = new Paint();

// 颜色变换的矩阵
2, 0x70ffffff,

0x00ffffff, Shader.TileMode.MIRROR);

paint.setShader(shader);

// 取两层绘制交集。显示下层。

paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));

// 绘制渲染倒影的矩形

canvas.drawRect(0, 0, w, h / 2, paint);

return bitmap;

}

public static Bitmap createGreyBitmap(Bitmap src) {

final int w = src.getWidth();

final int h = src.getHeight();

Bitmap bitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888);

Canvas canvas = new Canvas(bitmap);

Paint paint = new Paint();

// 颜色变换的矩阵

标签:src,ndk,paint,--,bitmap,int,androidstudio,new,Bitmap
来源: https://blog.csdn.net/m0_66155658/article/details/122666037

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有