亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

android圖片處理方法(不斷收集中)

系統(tǒng) 1874 0
    
//壓縮圖片大小
	public static Bitmap compressImage(Bitmap image) {

		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//質(zhì)量壓縮方法,這里100表示不壓縮,把壓縮后的數(shù)據(jù)存放到baos中
		int options = 100;
		while ( baos.toByteArray().length / 1024>100) {	//循環(huán)判斷如果壓縮后圖片是否大于100kb,大于繼續(xù)壓縮		
			baos.reset();//重置baos即清空baos
			image.compress(Bitmap.CompressFormat.JPEG, options, baos);//這里壓縮options%,把壓縮后的數(shù)據(jù)存放到baos中
			options -= 10;//每次都減少10
		}
		ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把壓縮后的數(shù)據(jù)baos存放到ByteArrayInputStream中
		Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream數(shù)據(jù)生成圖片
		return bitmap;
	}

  

    
/** 
     * 將彩色圖轉(zhuǎn)換為灰度圖 
     * @param img 位圖 
     * @return  返回轉(zhuǎn)換好的位圖 
     */  
    public Bitmap convertGreyImg(Bitmap img) {  
        int width = img.getWidth();         //獲取位圖的寬  
        int height = img.getHeight();       //獲取位圖的高  
          
        int []pixels = new int[width * height]; //通過位圖的大小創(chuàng)建像素點(diǎn)數(shù)組  
          
        img.getPixels(pixels, 0, width, 0, 0, width, height);  
        int alpha = 0xFF << 24;   
        for(int i = 0; i < height; i++)  {  
            for(int j = 0; j < width; j++) {  
                int grey = pixels[width * i + j];  
                  
                int red = ((grey  & 0x00FF0000 ) >> 16);  
                int green = ((grey & 0x0000FF00) >> 8);  
                int blue = (grey & 0x000000FF);  
                  
                grey = (int)((float) red * 0.3 + (float)green * 0.59 + (float)blue * 0.11);  
                grey = alpha | (grey << 16) | (grey << 8) | grey;  
                pixels[width * i + j] = grey;  
            }  
        }  
        Bitmap result = Bitmap.createBitmap(width, height, Config.RGB_565);  
        result.setPixels(pixels, 0, width, 0, 0, width, height);  
        return result;  
    }  

  


android圖片處理方法(不斷收集中)

將一個(gè)圖片切割成多個(gè)圖片
有種場(chǎng)景,我們想將一個(gè)圖片切割成多個(gè)圖片。比如我們?cè)陂_發(fā)一個(gè)拼圖的游戲,就首先要對(duì)圖片進(jìn)行切割。
以下是封裝好的兩個(gè)類,可以實(shí)現(xiàn)圖片的切割。僅供參考和學(xué)習(xí)。
一個(gè)是ImagePiece類,此類保存了一個(gè)Bitmap對(duì)象和一個(gè)標(biāo)識(shí)圖片的順序索引的int變量。
    
import android.graphics.Bitmap; 
public class ImagePiece {   
    public int index = 0;        
    public Bitmap bitmap = null;  
}

  

一個(gè)是ImageSplitter類,有一個(gè)靜態(tài)方法split,傳入的參數(shù)是要切割的Bitmap對(duì)象,和橫向和豎向的切割片數(shù)。比如傳入的是3、3,則橫豎向都切割成3片,最終會(huì)將整個(gè)圖片切割成3X3=9片。
    
import java.util.ArrayList;  
import java.util.List;  
  
import android.graphics.Bitmap;  
  
public class ImageSplitter {  
  
    public static List<ImagePiece> split(Bitmap bitmap, int xPiece, int yPiece) {  
  
        List<ImagePiece> pieces = new ArrayList<ImagePiece>(xPiece * yPiece);  
        int width = bitmap.getWidth();  
        int height = bitmap.getHeight();  
        int pieceWidth = width / 3;  
        int pieceHeight = height / 3;  
        for (int i = 0; i < yPiece; i++) {  
            for (int j = 0; j < xPiece; j++) {  
                ImagePiece piece = new ImagePiece();  
                piece.index = j + i * xPiece;  
                int xValue = j * pieceWidth;  
                int yValue = i * pieceHeight;  
                piece.bitmap = Bitmap.createBitmap(bitmap, xValue, yValue,  
                        pieceWidth, pieceHeight);  
                pieces.add(piece);  
            }  
        }  
  
        return pieces;  
    }  
  
}

  


1、圖標(biāo)加灰色過濾;
2、android的圖片資源默認(rèn)是靜態(tài)的,單實(shí)例;如果兩個(gè)IM好友的頭像一樣,最簡(jiǎn)單的都是用的軟件自帶頭像,有一個(gè)在線,一個(gè)離線,直接改變頭像的灰度,則兩個(gè)用戶的頭像都會(huì)變灰或者在線,答案是:Drawable.mutate()。
    
Drawable mDrawable = context.getResources().getDrawable(R.drawable.face_icon);  
//Make this drawable mutable.  
//A mutable drawable is guaranteed to not share its state with any other drawable.  
mDrawable.mutate();  
ColorMatrix cm = new ColorMatrix();  
cm.setSaturation(0);  
ColorMatrixColorFilter cf = new ColorMatrixColorFilter(cm);  
mDrawable.setColorFilter(cf);

  


生成縮略圖,摳自android launcher源碼:
    
/*
 * Copyright (C) 2008 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.launcher;

import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.PaintDrawable;
import android.graphics.Bitmap;
import android.graphics.PixelFormat;
import android.graphics.Canvas;
import android.graphics.PaintFlagsDrawFilter;
import android.graphics.Paint;
import android.graphics.Rect;
import android.content.res.Resources;
import android.content.Context;

/**
 * Various utilities shared amongst the Launcher's classes.
 */
final class Utilities {
    private static int sIconWidth = -1;
    private static int sIconHeight = -1;

    private static final Paint sPaint = new Paint();
    private static final Rect sBounds = new Rect();
    private static final Rect sOldBounds = new Rect();
    private static Canvas sCanvas = new Canvas();

    static {
        sCanvas.setDrawFilter(new PaintFlagsDrawFilter(Paint.DITHER_FLAG,
                Paint.FILTER_BITMAP_FLAG));
    }

    /**
     * Returns a Drawable representing the thumbnail of the specified Drawable.
     * The size of the thumbnail is defined by the dimension
     * android.R.dimen.launcher_application_icon_size.
     *
     * This method is not thread-safe and should be invoked on the UI thread only.
     *
     * @param icon The icon to get a thumbnail of.
     * @param context The application's context.
     *
     * @return A thumbnail for the specified icon or the icon itself if the
     *         thumbnail could not be created. 
     */
    static Drawable createIconThumbnail(Drawable icon, Context context) {
        if (sIconWidth == -1) {
            final Resources resources = context.getResources();
            sIconWidth = sIconHeight = (int) resources.getDimension(android.R.dimen.app_icon_size);
        }

        int width = sIconWidth;
        int height = sIconHeight;

        float scale = 1.0f;
        if (icon instanceof PaintDrawable) {
            PaintDrawable painter = (PaintDrawable) icon;
            painter.setIntrinsicWidth(width);
            painter.setIntrinsicHeight(height);
        } else if (icon instanceof BitmapDrawable) {
            // Ensure the bitmap has a density.
            BitmapDrawable bitmapDrawable = (BitmapDrawable) icon;
            Bitmap bitmap = bitmapDrawable.getBitmap();
            if (bitmap.getDensity() == Bitmap.DENSITY_NONE) {
                bitmapDrawable.setTargetDensity(context.getResources().getDisplayMetrics());
            }
        }
        int iconWidth = icon.getIntrinsicWidth();
        int iconHeight = icon.getIntrinsicHeight();

        if (width > 0 && height > 0) {
            if (width < iconWidth || height < iconHeight || scale != 1.0f) {
                final float ratio = (float) iconWidth / iconHeight;

                if (iconWidth > iconHeight) {
                    height = (int) (width / ratio);
                } else if (iconHeight > iconWidth) {
                    width = (int) (height * ratio);
                }

                final Bitmap.Config c = icon.getOpacity() != PixelFormat.OPAQUE ?
                            Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;
                final Bitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);
                final Canvas canvas = sCanvas;
                canvas.setBitmap(thumb);
                // Copy the old bounds to restore them later
                // If we were to do oldBounds = icon.getBounds(),
                // the call to setBounds() that follows would
                // change the same instance and we would lose the
                // old bounds
                sOldBounds.set(icon.getBounds());
                final int x = (sIconWidth - width) / 2;
                final int y = (sIconHeight - height) / 2;
                icon.setBounds(x, y, x + width, y + height);
                icon.draw(canvas);
                icon.setBounds(sOldBounds);
                icon = new FastBitmapDrawable(thumb);
            } else if (iconWidth < width && iconHeight < height) {
                final Bitmap.Config c = Bitmap.Config.ARGB_8888;
                final Bitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);
                final Canvas canvas = sCanvas;
                canvas.setBitmap(thumb);
                sOldBounds.set(icon.getBounds());
                final int x = (width - iconWidth) / 2;
                final int y = (height - iconHeight) / 2;
                icon.setBounds(x, y, x + iconWidth, y + iconHeight);
                icon.draw(canvas);
                icon.setBounds(sOldBounds);
                icon = new FastBitmapDrawable(thumb);
            }
        }

        return icon;
    }

    /**
     * Returns a Bitmap representing the thumbnail of the specified Bitmap.
     * The size of the thumbnail is defined by the dimension
     * android.R.dimen.launcher_application_icon_size.
     *
     * This method is not thread-safe and should be invoked on the UI thread only.
     *
     * @param bitmap The bitmap to get a thumbnail of.
     * @param context The application's context.
     *
     * @return A thumbnail for the specified bitmap or the bitmap itself if the
     *         thumbnail could not be created.
     */
    static Bitmap createBitmapThumbnail(Bitmap bitmap, Context context) {
        if (sIconWidth == -1) {
            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類實(shí)現(xiàn)鏡像方法
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保存為位圖并進(jìn)行縮放操作
//通過傳入圖片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;
	}
//通過傳入位圖,新的寬.高比進(jìn)行位圖的縮放操作
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:主運(yùn)行函數(shù)實(shí)例
* @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軸起點(diǎn)坐標(biāo)
* @param y
* :Y軸起點(diǎn)坐標(biāo)
* @param w
* :?jiǎn)我粓D片的寬度
* @param h
* :?jiǎn)我粓D片的高度
* @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.圖片縮放,對(duì)當(dāng)前圖片進(jìn)行縮放處理
/***
* 圖片的縮放方法
*
* @param bgimage
* :源圖片資源
* @param newWidth
* :縮放后寬度
* @param newHeight
* :縮放后高度
* @return
*/
public Bitmap zoomImage(Bitmap bgimage, int newWidth, int newHeight) {
// 獲取這個(gè)圖片的寬和高
int width = bgimage.getWidth();
int height = bgimage.getHeight();
// 創(chuàng)建操作圖片用的matrix對(duì)象
Matrix matrix = new Matrix();
// 計(jì)算縮放率,新尺寸除原始尺寸
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// 縮放圖片動(dòng)作
matrix.postScale(scaleWidth, scaleHeight);
Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, width, height,
matrix, true);
return bitmap;
}
4.繪制帶有邊框的文字,一般在游戲中起文字的美化作用
/***
* 繪制帶有邊框的文字
*
* @param strMsg
* :繪制內(nèi)容
* @param g
* :畫布
* @param paint
* :畫筆
* @param setx
* ::X軸起始坐標(biāo)
* @param sety
* :Y軸的起始坐標(biāo)
* @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.圖片翻轉(zhuǎn)
Resources res = this.getContext().getResources();
img = BitmapFactory.decodeResource(res, R.drawable.slogo);
Matrix matrix = new Matrix();
matrix.postRotate(90);        /*翻轉(zhuǎn)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轉(zhuǎn)化為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 baos.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 );//創(chuàng)建一個(gè)新的和SRC長度寬度一樣的位圖
        Canvas cv = new Canvas( newb );
        //draw src into
        cv.drawBitmap( src, 0, 0, null );//在 0,0坐標(biāo)開始畫入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();//存儲(chǔ)
        return newb;
    }
   /** 重新編碼Bitmap
   * 
   * @param src
   *          需要重新編碼的Bitmap
   *
   * @param format
   *          編碼后的格式(目前只支持png和jpeg這兩種格式)
   *
   * @param quality
   *          重新生成后的bitmap的質(zhì)量
   *
   * @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轉(zhuǎn)換成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) {
             os.write(buffer, 0, len);
             }
          } catch (java.io.IOException e) {

          }
          return os.toByteArray();
}
//把View轉(zhuǎn)換成Bitmap

    /**
     * 把一個(gè)View的對(duì)象轉(zhuǎn)換成bitmap
     */
    static Bitmap getViewBitmap(View v) {
    	
        v.clearFocus();
        v.setPressed(false);

        //能畫緩存就返回false
        boolean willNotCache = v.willNotCacheDrawing();
        v.setWillNotCacheDrawing(false); 
        int color = v.getDrawingCacheBackgroundColor();
        v.setDrawingCacheBackgroundColor(0);
        if (color != 0) {
            v.destroyDrawingCache();
        }
        v.buildDrawingCache();
        Bitmap cacheBitmap = v.getDrawingCache();
        if (cacheBitmap == null) {
            Log.e(TAG, "failed getViewBitmap(" + v + ")", new RuntimeException());
            return null;
        }
        Bitmap bitmap = Bitmap.createBitmap(cacheBitmap);
        // Restore the view
        v.destroyDrawingCache();
        v.setWillNotCacheDrawing(willNotCache);
        v.setDrawingCacheBackgroundColor(color);
        return bitmap;
    }


  

    
讀取raw資源文件中的mp3文件,然后通過音樂播放器播放:

	/**
	 * 把mp3文件寫入卡
	 * 
	 * @param fileName
	 *             輸出的文件名(全路徑)
	 * @param context
         *             context對(duì)象
	 */
	private void writeMP3ToSDcard(String fileName, Context context) {
		byte[] buffer = new byte[1024 * 8];
		int read;
		BufferedInputStream bin = new BufferedInputStream(context.getResources().openRawResource(R.raw.ring));
		try {
			BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(fileName));
			while ((read = bin.read(buffer)) > -1) {
				bout.write(buffer, 0, read);
			}
			bout.flush();
			bout.close();
			bin.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}


Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(newFile("XXXXmp3的文件全路徑")),"audio/*");
startActivity(intent);


  


繪制圖像倒影
    
private void  
_Init()   
{   
  m_paint = new Paint(Paint.ANTI_ALIAS_FLAG);   
  LinearGradient lg = new LinearGradient(   
    0, 0, 0, m_nShadowH,    
    0xB0FFFFFF, 0x00000000,   
    Shader.TileMode.CLAMP);   
  m_paint.setShader(lg);   
  m_paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY));   
}   
  
@Override protected void    
onDraw(Canvas canvas)   
{   
  super.onDraw(canvas);   
  
  int nX = 0;   
  int nY = 20;   
  
  _DrawNormalImg(canvas, nX, nY);   
  _DrawMirror(canvas, nX, nY);   
}    
  
private void  
_DrawNormalImg(Canvas canvas, int nX, int nY)   
{   
  canvas.save(Canvas.MATRIX_SAVE_FLAG);   
  canvas.translate(nX, nY);      
  m_dw.draw(canvas);   
  canvas.restore();   
}   
  
private void  
_DrawMirror(Canvas canvas, int nX, int nY)   
{   
  int nW = m_dw.getIntrinsicWidth();   
  int nH = m_dw.getIntrinsicHeight();   
  
  ///////////////////////////////////   
  //draw mirror image   
  canvas.save(Canvas.MATRIX_SAVE_FLAG);   
  canvas.scale(1.0f, -1.0f);   
  canvas.translate(nX, -(nY + nH * 2));   
  canvas.clipRect(0, nH, nW, nH - m_nShadowH);   
  m_dw.draw(canvas);   
  canvas.restore();   
  
  //////////////////////////////   
  //draw mask   
  canvas.save();   
  canvas.translate(nX, nY + nH);   
  canvas.drawRect(0, 0, nW, m_nShadowH, m_paint);   
  canvas.restore();   
}  

  

Android 繪圖座標(biāo)體系預(yù)設(shè)的原點(diǎn)在左上角,X 軸往右是越來越大的正值,而 Y 軸往下,則是越來越大的正值。要畫出垂直翻轉(zhuǎn)的圖片,其實(shí)也就是要垂直翻轉(zhuǎn)整個(gè)繪圖座標(biāo)體系。在 Android 中,要如何做?答案就是 canvas.scale(1.0f, -1.0f)。很簡(jiǎn)單吧,沒想到給 scale() 函式一個(gè)負(fù)值,就可以翻轉(zhuǎn)相對(duì)應(yīng)的軸。
在 Photoshop 中,做鏡像特效的第二步是要對(duì)這翻轉(zhuǎn)的圖片,加個(gè)由灰到黑的漸層 mask。
在 Android 中,要畫漸層色,那就一定得用 LinearGradient 這個(gè)類別。至於要對(duì)背景圖加上個(gè) mask,就請(qǐng)參考一下 Paint 的 setXfermode() 函式。_Init() 這個(gè)函式,就是負(fù)責(zé)生成一個(gè)由灰到黑漸層 mask 的 m_paint 物件。

android圖片處理方法(不斷收集中)

http://blog.csdn.net/Android_Tutor/archive/2010/11/02/5981753.aspx

http://www.cnblogs.com/TerryBlog/archive/2012/01/08/2316482.html

android常用圖片特效處理
http://www.eoeandroid.com/thread-170526-1-1.html

相機(jī)(Camera)實(shí)時(shí)濾鏡效果
http://www.eoeandroid.com/thread-171528-1-1.html

Android, WindowsPhone7, IOS ,vc2010平臺(tái)40多套圖片濾鏡開源
http://www.cnblogs.com/daizhj/archive/2012/05/15/2501406.html

Android實(shí)現(xiàn)獲取本機(jī)中所有圖片
http://www.cnblogs.com/hanyonglu/archive/2012/05/10/2494908.html



Android 圖片處理工具類封裝
http://www.open-open.com/lib/view/open1386682905126.html

android圖片處理方法(不斷收集中)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 狠狠色噜噜狠狠狠狠97不卡 | 欧美日韩在线网站 | 国产精品1000部在线观看 | 97超视频在线观看 | 国产精品亚洲片在线牛牛影视 | 精品无人区乱码1区2区3区免费 | 中文字幕一区二区三区四区五区人 | 日日夜人人澡人人澡人人看免 | 久久免费在线视频 | 老子影院午夜伦不卡 | 久久香蕉影视 | 欧美国产综合在线 | 老子影院伦不卡欧美 | 夜夜操天天 | 国产小视频在线观看 | 久久99热久久国产精品 | 婷婷激情五月网 | 国产精品久久久久久久久福利 | 久久青草免费免费91线频观看 | 在线观看国产久青草 | 欧美成人毛片免费视频 | 国产精品欧美亚洲韩国日本99 | 伊人久久中文字幕 | 日韩免费观看 | aaa一级特黄 | 日日狠狠久久偷偷四色综合免费 | 成人国产在线观看 | 曰本一级毛片 | 久久久久在线视频 | 亚洲国产片 | 成 人 黄 片 大全 | 夜夜爽夜夜叫夜夜高潮漏水 | 奇米影视狠狠狠天天777 | 91九色露脸 | 国产www在线播放 | 99在线视频精品费观看视 | 国外欧美一区另类中文字幕 | 国产免费爱在线观看视频 | 成人在线小视频 | 婷婷成人基地 | 99er这里只有精品 |