Android处理图片透明度并绘画图片
/***設置透明例子部分代碼***/ public class TestPicTransparencyView extends SurfaceView implements SurfaceHolder.Callback{public ManThread thread;//原始圖片和透明處理后的圖片bmpprivate Bitmap changed_pic_bmp,src_pic_bmp; //兩個圖加壓到的int數組.private int[] allBmpPixArray; private int[] changedBmpPixArray; //數組的長度,為像素點個數,為圖片的長*寬private int full_pic_int_size=BaseControl.SCREEN_HEIGHT*BaseControl.SCREEN_WIDTH;//屏幕像素private int min_pic_int_size = 0;//屏幕像素//透明圖片的長和寬private int small_pic_width;private int small_pic_height;//游戲畫面構造器public TestPicTransparencyView(Context context) {super(context);//設置透明圖片大小small_pic_width = BaseControl.SCREEN_WIDTH/2;small_pic_height = BaseControl.SCREEN_HEIGHT/2;//設置透明圖片解壓到數組的長度min_pic_int_size = small_pic_width*small_pic_height;//加載資源src_pic_bmp=BitmapFactory.decodeResource(getResources(), R.drawable.pic);changed_pic_bmp=BitmapFactory.decodeResource(getResources(), R.drawable.pic);//定義圖片解壓到的數組大小allBmpPixArray = new int[full_pic_int_size];changedBmpPixArray = new int[min_pic_int_size];//啟動繪畫線程SurfaceHolder holder = getHolder();holder.addCallback(this);thread = new ManThread(holder,context,new Handler());}//線程繪畫圖片class ManThread extends Thread{private SurfaceHolder mSurfaceHolder;public ManThread(SurfaceHolder sh,Context context,Handler ha){mSurfaceHolder = sh;//將前景圖的像素信息解壓到數組allBmpPixArray中src_pic_bmp.getPixels(allBmpPixArray, 0, BaseControl.SCREEN_WIDTH, 0, 0, BaseControl.SCREEN_WIDTH, BaseControl.SCREEN_HEIGHT);changed_pic_bmp.getPixels(changedBmpPixArray, 0, small_pic_width, 0, 0, small_pic_width, small_pic_height);//將小圖進行透明處理dealTransparency();}public void run(){Canvas c = null;c = mSurfaceHolder.lockCanvas(null);synchronized (mSurfaceHolder) {src_pic_bmp = Bitmap.createBitmap(allBmpPixArray,BaseControl.SCREEN_WIDTH, BaseControl.SCREEN_HEIGHT,Config.ARGB_8888);//重新用修改像素后的 數組構建圖片changed_pic_bmp= Bitmap.createBitmap(changedBmpPixArray,small_pic_width, small_pic_height,Config.ARGB_8888);c.drawBitmap(src_pic_bmp, 0, 0, null);c.drawBitmap(changed_pic_bmp, small_pic_width, small_pic_height, null);}if (c != null) {mSurfaceHolder.unlockCanvasAndPost(c);// 釋放對serface的編輯}}}//將小圖進行透明處理,每調用一次透明度減半public void dealTransparency(){for(int i= 0 ;i< small_pic_width;i++){for(int j= 0 ;j< small_pic_height;j++){for (int z=31;z>=24;z--) /*** 第一次調用 當Z=31時,1左移31位,高位顏色透明值為1和原圖的透明度值1& = 1 ,進入if*重復調用時會根據當前透明度選擇左移位數值*/if ( ( (1<<z)& changedBmpPixArray[i+j*small_pic_width])!=0){/*** * 說明:* RGB類型的像素的24-31位保存的是透明度信息,* 當值為255時代表不透明* 當值為0時代表完全透明* 0-23位保存顏色信息* * (1<<z)左移31位,值為127,原圖片不透明,透明值為255* 重復調用的話每減一次透明度折半*/changedBmpPixArray[i+j*small_pic_width]-=(1<<z);break;}}}}@Overridepublic void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {// TODO Auto-generated method stub}@Overridepublic void surfaceCreated(SurfaceHolder holder) {thread.start();}public void surfaceDestroyed(SurfaceHolder holder) {try{thread.join();}catch (InterruptedException e) {}} }
??
總結
以上是生活随笔為你收集整理的Android处理图片透明度并绘画图片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谷歌浏览器无法正常使用怎么办?Googl
- 下一篇: python实现图像识别水果_使用Pyt