-
final Resources resources = context.getResources();
-
sIconWidth = sIconHeight = (int) resources.getDimension(
-
android.R.dimen.app_icon_size);
-
}
-
int width = sIconWidth;
-
int height = sIconHeight;
-
final int bitmapWidth = bitmap.getWidth();
-
final int bitmapHeight = bitmap.getHeight();
-
if (width > 0 && height > 0) {
-
if (width < bitmapWidth || height < bitmapHeight) {
-
final float ratio = (float) bitmapWidth / bitmapHeight;
-
if (bitmapWidth > bitmapHeight) {
-
height = (int) (width / ratio);
-
} else if (bitmapHeight > bitmapWidth) {
-
width = (int) (height * ratio);
-
}
-
final Bitmap.Config c = (width == sIconWidth && height == sIconHeight) ?
-
bitmap.getConfig() : Bitmap.Config.ARGB_8888;
-
final Bitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);
-
final Canvas canvas = sCanvas;
-
final Paint paint = sPaint;
-
canvas.setBitmap(thumb);
-
paint.setDither(false);
-
paint.setFilterBitmap(true);
-
sBounds.set((sIconWidth - width) / 2, (sIconHeight - height) / 2, width, height);
-
sOldBounds.set(0, 0, bitmapWidth, bitmapHeight);
-
canvas.drawBitmap(bitmap, sOldBounds, sBounds, paint);
-
return thumb;
-
} else if (bitmapWidth < width || bitmapHeight < height) {
-
final Bitmap.Config c = Bitmap.Config.ARGB_8888;
-
final Bitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);
-
final Canvas canvas = sCanvas;
-
final Paint paint = sPaint;
-
canvas.setBitmap(thumb);
-
paint.setDither(false);
-
paint.setFilterBitmap(true);
-
canvas.drawBitmap(bitmap, (sIconWidth - bitmapWidth) / 2,
-
(sIconHeight - bitmapHeight) / 2, paint);
-
return thumb;
-
}
-
}
-
return bitmap;
-
}
-
}
-
//Android Matrix类实现镜像方法
-
public void drawRegion(Image image_src,
-
int x_src, int y_src,
-
int width, int height,
-
int transform,
-
int x_dest, int y_dest,
-
int anchor){
-
if((anchor&VCENTER) != 0){
-
y_dest -= height/2;
-
}else if((anchor&BOTTOM) != 0){
-
y_dest -= height;
-
}
-
if((anchor&RIGHT) != 0){
-
x_dest -= width;
-
}else if((anchor&HCENTER) != 0){
-
x_dest -= width/2;
-
}
-
Bitmap newMap = Bitmap.createBitmap(image_src.getBitmap(), x_src, y_src, width, height);
-
Matrix mMatrix = new Matrix();
-
Matrix temp = new Matrix();
-
Matrix temp2 = new Matrix();
-
float[] mirrorY = {
-
-1, 0, 0,
-
0, 1, 0,
-
0, 0, 1
-
};
-
temp.setValues(mirrorY);
-
switch(transform){
-
case Sprite.TRANS_NONE:
-
break;
-
case Sprite.TRANS_ROT90:
-
mMatrix.setRotate(90,width/2, height/2);
-
break;
-
case Sprite.TRANS_ROT180:
-
mMatrix.setRotate(180,width/2, height/2);
-
break;
-
case Sprite.TRANS_ROT270:
-
mMatrix.setRotate(270,width/2, height/2);
-
break;
-
case Sprite.TRANS_MIRROR:
-
mMatrix.postConcat(temp);
-
break;
-
case Sprite.TRANS_MIRROR_ROT90:
-
mMatrix.postConcat(temp);
-
mMatrix.setRotate(90,width/2, height/2);
-
break;
-
case Sprite.TRANS_MIRROR_ROT180:
-
mMatrix.postConcat(temp);
-
mMatrix.setRotate(180,width/2, height/2);
-
break;
-
case Sprite.TRANS_MIRROR_ROT270:
-
mMatrix.postConcat(temp);
-
mMatrix.setRotate(270,width/2, height/2);
-
break;
-
}
-
mMatrix.setTranslate(x_dest, y_dest);
-
canvas.drawBitmap(newMap, mMatrix, mPaint);
-
}
-
//图片Url保存为位图并进行缩放操作
-
//通过传入图片url获取位图方法
-
public Bitmap returnBitMap(String url) {
-
URL myFileUrl = null;
-
Bitmap bitmap = null;
-
try {
-
myFileUrl = new URL(url);
-
} catch (MalformedURLException e) {
-
e.printStackTrace();
-
}
-
try {
-
HttpURLConnection conn = (HttpURLConnection) myFileUrl
-
.openConnection();
-
conn.setDoInput(true);
-
conn.connect();
-
InputStream is = conn.getInputStream();
-
bitmap = BitmapFactory.decodeStream(is);
-
is.close();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
Log.v(tag, bitmap.toString());
-
return bitmap;
-
}
-
//通过传入位图,新的宽.高比进行位图的缩放操作
-
public static Drawable resizeImage(Bitmap bitmap, int w, int h) {
-
// load the origial Bitmap
-
Bitmap BitmapOrg = bitmap;
-
int width = BitmapOrg.getWidth();
-
int height = BitmapOrg.getHeight();
-
int newWidth = w;
-
int newHeight = h;
-
Log.v(tag, String.valueOf(width));
-
Log.v(tag, String.valueOf(height));
-
Log.v(tag, String.valueOf(newWidth));
-
Log.v(tag, String.valueOf(newHeight));
-
// calculate the scale
-
float scaleWidth = ((float) newWidth) / width;
-
float scaleHeight = ((float) newHeight) / height;
-
// create a matrix for the manipulation
-
Matrix matrix = new Matrix();
-
// resize the Bitmap
-
matrix.postScale(scaleWidth, scaleHeight);
-
// if you want to rotate the Bitmap
-
// matrix.postRotate(45);
-
// recreate the new Bitmap
-
Bitmap resizedBitmap = Bitmap.createBitmap(BitmapOrg, 0, 0, width,
-
height, matrix, true);
-
// make a Drawable from Bitmap to allow to set the Bitmap
-
// to the ImageView, ImageButton or what ever
-
return new BitmapDrawable(resizedBitmap);
-
}
-
1.图片加载方法,方便用户加载图片
-
/***
-
* 加载本地图片
-
* @param context:主运行函数实例
-
* @param bitAdress:图片地址,一般指向R下的drawable目录
-
* @return
-
*/
-
public final Bitmap CreatImage(Context context, int bitAdress) {
-
Bitmap bitmaptemp = null;
-
bitmaptemp = BitmapFactory.decodeResource(context.getResources(),
-
bitAdress);
-
return bitmaptemp;
-
}
-
2.图片平均分割方法,将大图平均分割为N行N列,方便用户使用
-
/***
-
* 图片分割
-
*
-
* @param g
-
* :画布
-
* @param paint
-
* :画笔
-
* @param imgBit
-
* :图片
-
* @param x
-
* :X轴起点坐标
-
* @param y
-
* :Y轴起点坐标
-
* @param w
-
* :单一图片的宽度
-
* @param h
-
* :单一图片的高度
-
* @param line
-
* :第几列
-
* @param row
-
* :第几行
-
*/
-
public final void cuteImage(Canvas g, Paint paint, Bitmap imgBit, int x,
-
int y, int w, int h, int line, int row) {
-
g.clipRect(x, y, x + w, h + y);
-
g.drawBitmap(imgBit, x – line * w, y – row * h, paint);
-
g.restore();
-
}
-
3.图片缩放,对当前图片进行缩放处理
-
/***
-
* 图片的缩放方法
-
*
-
* @param bgimage
-
* :源图片资源
-
* @param newWidth
-
* :缩放后宽度
-
* @param newHeight
-
* :缩放后高度
-
* @return
-
*/
-
public Bitmap zoomImage(Bitmap bgimage, int newWidth, int newHeight) {
-
// 获取这个图片的宽和高
-
int width = bgimage.getWidth();
-
int height = bgimage.getHeight();
-
// 创建操作图片用的matrix对象
-
Matrix matrix = new Matrix();
-
// 计算缩放率,新尺寸除原始尺寸
-
float scaleWidth = ((float) newWidth) / width;
-
float scaleHeight = ((float) newHeight) / height;
-
// 缩放图片动作
-
matrix.postScale(scaleWidth, scaleHeight);
-
Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, width, height,
-
matrix, true);
-
return bitmap;
-
}
-
4.绘制带有边框的文字,一般在游戏中起文字的美化作用
-
/***
-
* 绘制带有边框的文字
-
*
-
* @param strMsg
-
* :绘制内容
-
* @param g
-
* :画布
-
* @param paint
-
* :画笔
-
* @param setx
-
* ::X轴起始坐标
-
* @param sety
-
* :Y轴的起始坐标
-
* @param fg
-
* :前景色
-
* @param bg
-
* :背景色
-
*/
-
public void drawText(String strMsg, Canvas g, Paint paint, int setx,
-
int sety, int fg, int bg) {
-
paint.setColor(bg);
-
g.drawText(strMsg, setx + 1, sety, paint);
-
g.drawText(strMsg, setx, sety – 1, paint);
-
g.drawText(strMsg, setx, sety + 1, paint);
-
g.drawText(strMsg, setx – 1, sety, paint);
-
paint.setColor(fg);
-
g.drawText(strMsg, setx, sety, paint);
-
g.restore();
-
}
-
5.Android 图片透明度处理代码
-
/**
-
* 图片透明度处理
-
*
-
* @param sourceImg
-
* 原始图片
-
* @param number
-
* 透明度
-
* @return
-
*/
-
public static Bitmap setAlpha(Bitmap sourceImg, int number) {
-
int[] argb = new int[sourceImg.getWidth() * sourceImg.getHeight()];
-
sourceImg.getPixels(argb, 0, sourceImg.getWidth(), 0, 0,sourceImg.getWidth(), sourceImg.getHeight());// 获得图片的ARGB值
-
number = number * 255 / 100;
-
for (int i = 0; i < argb.length; i++) {
-
argb = (number << 24) | (argb & 0×00FFFFFF);// 修改最高2位的值
-
}
-
sourceImg = Bitmap.createBitmap(argb, sourceImg.getWidth(), sourceImg.getHeight(), Config.ARGB_8888);
-
return sourceImg;
-
}
-
6.图片翻转
-
Resources res = this.getContext().getResources();
-
img = BitmapFactory.decodeResource(res, R.drawable.slogo);
-
Matrix matrix = new Matrix();
-
matrix.postRotate(90); /*翻转90度*/
-
int width = img.getWidth();
-
int height = img.getHeight();
-
r_img = Bitmap.createBitmap(img, 0, 0, width, height, matrix, true);
-
import android.graphics.Bitmap;
-
import android.graphics.Canvas;
-
import android.graphics.LinearGradient;
-
import android.graphics.Matrix;
-
import android.graphics.Paint;
-
import android.graphics.PixelFormat;
-
import android.graphics.PorterDuffXfermode;
-
import android.graphics.Rect;
-
import android.graphics.RectF;
-
import android.graphics.Bitmap.Config;
-
import android.graphics.PorterDuff.Mode;
-
import android.graphics.Shader.TileMode;
-
import android.graphics.drawable.Drawable;
-
/**
-
*
-
* @author superdev
-
* @version 1.0
-
*
-
*/
-
public class ImageUtil {
-
/**
-
* 放大缩小图片
-
*/
-
public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h) {
-
int width = bitmap.getWidth();
-
int height = bitmap.getHeight();
-
Matrix matrix = new Matrix();
-
float scaleWidht = ((float) w / width);
-
float scaleHeight = ((float) h / height);
-
matrix.postScale(scaleWidht, scaleHeight);
-
Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
-
return newbmp;
-
}
-
/**
-
* 将Drawable转化为Bitmap
-
*/
-
public static Bitmap drawableToBitmap(Drawable drawable) {
-
int width = drawable.getIntrinsicWidth();
-
int height = drawable.getIntrinsicHeight();
-
Bitmap bitmap = Bitmap.createBitmap(width, height, drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);
-
Canvas canvas = new Canvas(bitmap);
-
drawable.setBounds(0, 0, width, height);
-
drawable.draw(canvas);
-
return bitmap;
-
}
-
/**
-
* 获得圆角图片的方法
-
*/
-
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {
-
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
-
Canvas canvas = new Canvas(output);
-
final int color = 0xff424242;
-
final Paint paint = new Paint();
-
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
-
final RectF rectF = new RectF(rect);
-
paint.setAntiAlias(true);
-
canvas.drawARGB(0, 0, 0, 0);
-
paint.setColor(color);
-
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
-
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
-
canvas.drawBitmap(bitmap, rect, rect, paint);
-
return output;
-
}
-
/**
-
* 获得带倒影的图片方法
-
*/
-
public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap) {
-
final int reflectionGap = 4;
-
int width = bitmap.getWidth();
-
int height = bitmap.getHeight();
-
Matrix matrix = new Matrix();
-
matrix.preScale(1, -1);
-
Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, height / 2, width, height / 2, matrix, false);
-
Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height / 2), Config.ARGB_8888);
-
Canvas canvas = new Canvas(bitmapWithReflection);
-
canvas.drawBitmap(bitmap, 0, 0, null);
-
Paint deafalutPaint = new Paint();
-
canvas.drawRect(0, height, width, height + reflectionGap, deafalutPaint);
-
canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);
-
Paint paint = new Paint();
-
LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0, bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP);
-
paint.setShader(shader);
-
// Set the Transfer mode to be porter duff and destination in
-
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
-
// Draw a rectangle using the paint with our linear gradient
-
canvas.drawRect(0, height, width, bitmapWithReflection.getHeight() + reflectionGap, paint);
-
return bitmapWithReflection;
-
}
-
}
-
private byte[] Bitmap2Bytes(Bitmap bm){
-
ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
-
return ba
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整资料开源分享
os.toByteArray();
-
}
-
private Bitmap Bytes2Bimap(byte[] b){
-
if(b.length!=0){
-
return BitmapFactory.decodeByteArray(b, 0, b.length);
-
}
-
else {
-
return null;
-
}
-
}
-
/**
-
* create the bitmap from a byte array
-
*生成水印图片
-
* @param src the bitmap object you want proecss
-
* @param watermark the water mark above the src
-
* @return return a bitmap object ,if paramter’s length is 0,return null
-
*/
-
private Bitmap createBitmap( Bitmap src, Bitmap watermark )
-
{
-
String tag = “createBitmap”;
-
Log.d( tag, “create a new bitmap” );
-
if( src == null )
-
{
-
return null;
-
}
-
int w = src.getWidth();
-
int h = src.getHeight();
-
int ww = watermark.getWidth();
-
int wh = watermark.getHeight();
-
//create the new blank bitmap
-
Bitmap newb = Bitmap.createBitmap( w, h, Config.ARGB_8888 );//创建一个新的和SRC长度宽度一样的位图
-
Canvas cv = new Canvas( newb );
-
//draw src into
-
cv.drawBitmap( src, 0, 0, null );//在 0,0坐标开始画入src
-
//draw watermark into
-
cv.drawBitmap( watermark, w - ww + 5, h - wh + 5, null );//在src的右下角画入水印
-
//save all clip
-
cv.save( Canvas.ALL_SAVE_FLAG );//保存
-
//store
-
cv.restore();//存储
-
return newb;
-
}
-
/** 重新编码Bitmap
-
*
-
* @param src
-
* 需要重新编码的Bitmap
-
*
-
* @param format
-
* 编码后的格式(目前只支持png和jpeg这两种格式)
-
*
-
* @param quality
-
* 重新生成后的bitmap的质量
-
*
-
* @return
-
* 返回重新生成后的bitmap
-
*/
-
private static Bitmap codec(Bitmap src, Bitmap.CompressFormat format,
-
int quality) {
-
ByteArrayOutputStream os = new ByteArrayOutputStream();
-
src.compress(format, quality, os);
-
byte[] array = os.toByteArray();
-
return BitmapFactory.decodeByteArray(array, 0, array.length);
-
}
-
//Stream转换成Byte
-
static byte[] streamToBytes(InputStream is) {
-
ByteArrayOutputStream os = new ByteArrayOutputStream(1024);
-
byte[] buffer = new byte[1024];
-
int len;
-
try {
-
while ((len = is.read(buffer)) >= 0) {
总结
最后对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
相信它会给大家带来很多收获:
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
-
int quality) {
-
ByteArrayOutputStream os = new ByteArrayOutputStream();
-
src.compress(format, quality, os);
-
byte[] array = os.toByteArray();
-
return BitmapFactory.decodeByteArray(array, 0, array.length);
-
}
-
//Stream转换成Byte
-
static byte[] streamToBytes(InputStream is) {
-
ByteArrayOutputStream os = new ByteArrayOutputStream(1024);
-
byte[] buffer = new byte[1024];
-
int len;
-
try {
-
while ((len = is.read(buffer)) >= 0) {
总结
最后对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
相信它会给大家带来很多收获:
[外链图片转存中…(img-Z6p2Xb7r-1640759041380)]
[外链图片转存中…(img-ASNgZajU-1640759041381)]
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。