Android處理圖片透明度並繪畫圖片

來源:互聯網
上載者:User

/***設定透明例子部分代碼***/<br />public class TestPicTransparencyView extends SurfaceView implements SurfaceHolder.Callback{<br /> public ManThread thread;<br />//原始圖片和透明處理後的圖片bmp<br />private Bitmap changed_pic_bmp,src_pic_bmp;<br />//兩個圖加壓到的int數組.<br />private int[] allBmpPixArray;<br />private int[] changedBmpPixArray;<br />//數組的長度,為像素點個數,為圖片的長*寬<br /> private int full_pic_int_size=BaseControl.SCREEN_HEIGHT*BaseControl.SCREEN_WIDTH;//螢幕像素<br /> private int min_pic_int_size = 0;//螢幕像素<br /> //透明圖片的長和寬<br /> private int small_pic_width;<br /> private int small_pic_height;</p><p>//遊戲畫面構造器<br />public TestPicTransparencyView(Context context) {<br />super(context);<br />//設定透明圖片大小<br />small_pic_width = BaseControl.SCREEN_WIDTH/2;<br />small_pic_height = BaseControl.SCREEN_HEIGHT/2;<br />//設定透明圖片解壓到數組的長度<br />min_pic_int_size = small_pic_width*small_pic_height;<br />//載入資源<br />src_pic_bmp=BitmapFactory.decodeResource(getResources(), R.drawable.pic);<br />changed_pic_bmp=BitmapFactory.decodeResource(getResources(), R.drawable.pic);<br />//定義圖片解壓到的數組大小<br />allBmpPixArray = new int[full_pic_int_size];<br />changedBmpPixArray = new int[min_pic_int_size];<br />//啟動繪畫線程<br />SurfaceHolder holder = getHolder();<br />holder.addCallback(this);<br />thread = new ManThread(holder,context,new Handler());<br />}</p><p>//線程繪畫圖片<br />class ManThread extends Thread{<br />private SurfaceHolder mSurfaceHolder;<br />public ManThread(SurfaceHolder sh,Context context,Handler ha)<br />{<br />mSurfaceHolder = sh;<br />//將前景圖的像素資訊解壓到數組allBmpPixArray中<br />src_pic_bmp.getPixels(allBmpPixArray, 0, BaseControl.SCREEN_WIDTH, 0, 0, BaseControl.SCREEN_WIDTH, BaseControl.SCREEN_HEIGHT);<br />changed_pic_bmp.getPixels(changedBmpPixArray, 0, small_pic_width, 0, 0, small_pic_width, small_pic_height);<br />//將小圖進行透明處理<br />dealTransparency();<br />}</p><p>public void run(){<br />Canvas c = null;<br />c = mSurfaceHolder.lockCanvas(null);<br />synchronized (mSurfaceHolder) {<br />src_pic_bmp = Bitmap.createBitmap(allBmpPixArray,<br />BaseControl.SCREEN_WIDTH, BaseControl.SCREEN_HEIGHT,<br />Config.ARGB_8888);<br />//重新用修改像素後的 數組構建圖片<br />changed_pic_bmp= Bitmap.createBitmap(changedBmpPixArray,<br />small_pic_width, small_pic_height,<br />Config.ARGB_8888);<br />c.drawBitmap(src_pic_bmp, 0, 0, null);<br />c.drawBitmap(changed_pic_bmp, small_pic_width, small_pic_height, null);<br />}<br />if (c != null) {<br />mSurfaceHolder.unlockCanvasAndPost(c);// 釋放對serface的編輯<br />}<br />}<br />}</p><p>//將小圖進行透明處理,每調用一次透明度減半<br />public void dealTransparency(){<br />for(int i= 0 ;i< small_pic_width;i++){<br />for(int j= 0 ;j< small_pic_height;j++){<br />for (int z=31;z>=24;z--)<br />/**<br /> * 第一次調用 當Z=31時,1左移31位,高位顏色透明值為1和原圖的透明度值1& = 1 ,進入if<br /> *重複調用時會根據當前透明度選擇左移位元值<br /> */<br />if ( ( (1<<z)& changedBmpPixArray[i+j*small_pic_width])!=0)<br />{<br />/**<br /> * * 說明:<br /> * RGB類型的像素的24-31位儲存的是透明度資訊,<br /> * 當值為255時代表不透明<br /> * 當值為0時代表完全透明<br /> * 0-23位儲存顏色資訊<br /> *<br /> * (1<<z)左移31位,值為127,原圖片不透明,透明值為255<br /> * 重複調用的話每減一次透明度折半<br /> */<br />changedBmpPixArray[i+j*small_pic_width]-=(1<<z);<br />break;<br />}<br />}<br />}<br />}</p><p>@Override<br />public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {<br />// TODO Auto-generated method stub</p><p>}<br />@Override<br />public void surfaceCreated(SurfaceHolder holder) {<br />thread.start();<br />}<br />public void surfaceDestroyed(SurfaceHolder holder) {<br />try<br />{</p><p>thread.join();<br />}<br />catch (InterruptedException e) {<br /> }<br />}<br />}

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.