Android學習筆記進階18之畫圖並儲存圖片到本地

來源:互聯網
上載者:User

1、首先建立一個Bitmap圖片,並指定大小;
 
2、在該圖片上建立一個新的畫布Canvas,然後在畫布上繪製,並儲存即可;
 
3、需要儲存的目錄File,注意如果寫的目錄如“/sdcard/song/”如果不存在的話,要先建立(file.mkdirs).。

4、需要添加許可權:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Canvas是一個畫布,你可以建立一個空白的畫布,就直接new一個Canvas對象,不需要參數。也可以先使用BitmapFactory建立一個Bitmap對象,作為新的Canvas對象的參數,也就是說這個畫布不是空白的,如果你想儲存圖片的話,最好是Bitmap是一個新的,而不是從某個檔案中讀入進來的,或者是Drawable對象。然後使用Canvas畫第一張圖上去,在畫第二張圖上去,最後使用Canvas.save(int flag)的方法進行儲存,注意save方法裡面的參數可以儲存單個圖層,如果是儲存全部圖層的
話使用 save( Canvas.ALL_SAVE_FLAG )。

 

關於圖片旋轉問題不懂的話,請看博文:Android學習筆記之Bitmap位元影像的旋轉

                                這是原圖片和旋轉後圖片

 

                                                                     這是儲存到本地的圖片800*600 JPG格式

 

具體實現:

package xiaosi.bitmap;</p><p>import android.app.Activity;<br />import android.os.Bundle;</p><p>public class mianActivity extends Activity<br />{</p><p>private BitmapView bitmapView = null;<br />@Override<br />protected void onCreate(Bundle savedInstanceState)<br />{<br />super.onCreate(savedInstanceState);<br />bitmapView = new BitmapView(this);<br />setContentView(bitmapView);<br />}<br />}<br />

BitmapView.java

package xiaosi.bitmap;</p><p>import java.io.File;<br />import java.io.FileOutputStream;</p><p>import android.content.Context;<br />import android.content.res.Resources;<br />import android.graphics.Bitmap;<br />import android.graphics.Bitmap.Config;<br />import android.graphics.BitmapFactory;<br />import android.graphics.Canvas;<br />import android.graphics.Color;<br />import android.graphics.Matrix;<br />import android.view.View;</p><p>public class BitmapView extends View<br />{<br />private Matrix matrix = null;<br />public BitmapView(Context context)<br />{<br />super(context);<br />}</p><p>public void onDraw(Canvas canvas)<br />{</p><p>// 擷取資源檔的引用res<br />Resources res = getResources();<br />// 擷取圖形資源檔<br />Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.h);<br />// 設定canvas畫布背景為白色<br />canvas.drawColor(Color.BLACK);<br />canvas.drawBitmap(bmp, 0, 0, null);<br />// 定義矩陣對象<br />matrix = new Matrix();<br />//旋轉30度<br />matrix.postRotate(30);<br />Bitmap bitmap = Bitmap.createBitmap(bmp, 0, 50, bmp.getWidth(), bmp.getHeight()/2,<br />matrix, true);<br />canvas.drawBitmap(bitmap, 0, 250, null);<br />SaveBitmap(bitmap);<br />}<br />//儲存到本地<br />public void SaveBitmap(Bitmap bmp)<br />{<br />Bitmap bitmap = Bitmap.createBitmap(800, 600, Config.ARGB_8888);<br />Canvas canvas = new Canvas(bitmap);<br />//載入背景圖片<br />Bitmap bmps = BitmapFactory.decodeResource(getResources(), R.drawable.playerbackground);<br />canvas.drawBitmap(bmps, 0, 0, null);<br />//載入要儲存的畫面<br />canvas.drawBitmap(bmp, 10, 100, null);<br />//儲存全部圖層<br />canvas.save(Canvas.ALL_SAVE_FLAG);<br />canvas.restore();<br />//儲存路徑<br />File file = new File("/sdcard/song/");<br />if(!file.exists())<br />file.mkdirs();<br />try {<br />FileOutputStream fileOutputStream = new FileOutputStream(file.getPath() + "/xuanzhuan.jpg");<br />bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);<br />fileOutputStream.close();<br />System.out.println("saveBmp is here");<br />} catch (Exception e) {<br />e.printStackTrace();<br />}<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.