導航:首頁 > 操作系統 > androidsaveimage

androidsaveimage

發布時間:2022-05-29 03:19:15

1. 如何在android裡面使用代碼截屏

方法一:

(1)主要就是利用SDK提供的View.getDrawingCache()方法。網上已經有很多的實例了。首先創建一個android project,然後進行Layout,畫一個按鍵

HelloAndroid.java實現代碼為:packagecom.example.helloandroid;

這個代碼會在按下app中按鍵的時候自動在手機的/sdcard/目錄下生成一個時間戳命名的png截屏文件。

這種截屏有一個問題,就是只能截到一部分,比如電池指示部分就截不出來了。

(2)在APK中調用「adb shell screencap -pfilepath」 命令

(1). 在AndroidManifest.xml文件中添加

(2). 修改APK為系統許可權,將APK放到源碼編譯

(3).利用系統的API,實現Screenshot,這部分代碼是系統隱藏的,需要在源碼下編譯,

1).修改Android.mk, 添加系統許可權

LOCAL_CERTIFICATE := platform

2).修改AndroidManifest.xml 文件,添加

許可權

方法二:

Android本地編程(Native Programming)讀取framebuffer

(1)命令行,框架的截屏功能是通過framebuffer來實現的,所以我們先來介紹一下framebuffer。

Linux FrameBuffer 本質上只是提供了對圖形設備的硬體抽象,在開發者看來,FrameBuffer 是一塊顯示緩存,往顯示緩存中寫入特定格式的數據就意味著向屏幕輸出內容。所以說FrameBuffer就是一塊白板。例如對於初始化為16 位色的FrameBuffer 來說, FrameBuffer中的兩個位元組代表屏幕上一個點,從上到下,從左至右,屏幕位置與內存地址是順序的線性關系。幀緩存有個地址,是在內存里。我們通過不停的向frame buffer中寫入數據, 顯示控制器就自動的從frame buffer中取數據並顯示出來。全部的圖形都共享內存中同一個幀緩存。

Android系統是基於Linux內核的,所以也存在framebuffer這個設備,我們要實現截屏的話只要能獲取到framebuffer中的數據,然後把數據轉換成圖片就可以了,android中的framebuffer數據是存放在 /dev/graphics/fb0 文件中的,所以我們只需要來獲取這個文件的數據就可以得到當前屏幕的內容。

現在我們的測試代碼運行時候是通過RC(remote controller)方式來運行被測應用的,那就需要在PC機上來訪問模擬器或者真機上的framebuffer數據,這個的話可以通過android的ADB命令來實現。

1、需要在AndroidManifest.xml中加入代碼:android:sharedUserId="android.uid.system"。

2、由於調用了@hide的API,所以編譯得時候請使用makefile編譯。或者通過在Eclipse中添加Jar文件通過編譯。

3、此代碼只在Android4.0中使用過,2.3的就沒去做測試了。

  1. 利用TakeScreenShotService截圖Android手機一般都自帶有手機屏幕截圖的功能:在手機任何界面(當然手機要是開機點亮狀態),通過按組合鍵,屏幕閃一下,然後咔嚓一聲,截圖的照片會保存到當前手機的圖庫中,

  2. 對手機android源碼中通過組合鍵屏幕截圖的整個流程有個大體了解了,在改動中熟悉按鍵的捕獲原理,並且清楚調用的截屏函數介面即可。

2. Android開發,圖庫獲取圖片路徑

public class TestCameraActivity extends Activity implements OnClickListener{ private Uri mOutPutFileUri; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button takePiCButton = (Button) this.findViewById(R.id.button1); takePiCButton.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button1: saveFullImage(); break; default: break; } } private void saveFullImage(){ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //文件夾aaaa String path = Environment.getExternalStorageDirectory().toString()+"/aaaa"; File path1 = new File(path); if(!path1.exists()){ path1.mkdirs(); } File file = new File(path1,System.currentTimeMillis()+".jpg"); mOutPutFileUri = Uri.fromFile(file); intent.putExtra(MediaStore.EXTRA_OUTPUT, mOutPutFileUri); startActivityForResult(intent, 1); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == 1){ Uri imageUri = null; if(data != null){ if(data.hasExtra("data")){ Bitmap thunbnail = data.getParcelableExtra("data"); //處理縮略圖 } }else{ //處理mOutPutFileUri中的完整圖像 } } } }

3. (android )怎麼在一個ImageView中顯示多張圖片,並可設置圖片的位置謝謝!

在一個ImageView中顯示多張圖片的過程與原理實際是:將多張圖片縮放重定位後重繪到一張圖然後顯示出來。
典型的應用有縮略圖、水印等應用。
具體實現的關鍵代碼如下:
Bitmap icon = Bitmap.createBitmap(width, hight, Bitmap.Config.ARGB_8888); //建立一個空的圖畫板
Canvas canvas = new Canvas(icon);//初始化畫布繪制的圖像到icon上
Paint photoPaint = new Paint(); //建立畫筆
Rect dst = new Rect(0, 0, width, hight);//創建一個指定的新矩形的坐標
canvas.drawBitmap(photo, src, dst, photoPaint);//將photo 縮放或則擴大到 dst使用的填充區photoPaint
canvas.save(Canvas.ALL_SAVE_FLAG);
image.setImageBitmap(icon);

4. android如何顯示blob欄位求答案

android如何顯示blob方法如下:
BOLB表示二進制大對象,這種數據類型通過用來保存圖片,圖象,視頻等。

一,使用場景:
http://blog.sina.com.cn/s/blog_8cfbb99201012oqn.html

public class MySQLiteOpenHelper extends SQLiteOpenHelper {
1,重寫構造方法
public MySQLiteOpenHelper(Context context, String name,
CursorFactory cursor, int version) {
super(context, name, cursor, version);
}

2, 創建資料庫的方法
public void onCreate(SQLiteDatabase db) {
3, 創建一個資料庫,表名:imagetable,欄位:_id、image。
db.execSQL("CREATE TABLE imagetable (_id INTEGER PRIMARY KEY AUTOINCREMENT,image BLOB)");
}

4, 更新資料庫的方法
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

}

5,創建助手類的實例
// CursorFactory的值為null,表示採用默認的工廠類
mySQLiteOpenHelper = new MySQLiteOpenHelper(this, "saveimage.db", null,1);
6, 創建一個可讀寫的資料庫
mydb = mySQLiteOpenHelper.getWritableDatabase();

7,將圖片轉化為點陣圖
Bitmap bitmap1=BitmapFactory.decodeResource(getResources(), R.drawable.erweima);

int size=bitmap1.getWidth()*bitmap1.getHeight()*4;
//創建一個位元組數組輸出流,流的大小為size
ByteArrayOutputStream baos=new ByteArrayOutputStream(size);
//設置點陣圖的壓縮格式,質量為100%,並放入位元組數組輸出流中 bitmap1.compress(Bitmap.CompressFormat.PNG, 100, baos);
//將位元組數組輸出流轉化為位元組數組byte[]
byte[] imagedata1=baos.toByteArray();

//將位元組數組保存到資料庫中
ContentValues cv=new ContentValues();
cv.put("_id", 1);
cv.put("image", imagedata1);
mydb.insert("imagetable", null, cv);
//關閉位元組數組輸出流
baos.close();

二,從資料庫中查詢的方法:
1,創建一個指針
Cursor cur=mydb.query("imagetable", new String[]{"_id","image"}, null, null, null, null, null);
byte[] imagequery=null;
if(cur.moveToNext()){
2,將Blob數據轉化為位元組數組imagequery=cur.getBlob(cur.getColumnIndex("image"));
}
3,將位元組數組轉化為點陣圖
Bitmap imagebitmap=BitmapFactory.decodeByteArray(imagequery, 0, imagequery.length);
iv1=(ImageView) findViewById(R.id.imageView1);
4,將點陣圖顯示為圖片
iv1.setImageBitmap(imagebitmap);

5. android中語音的壓縮使用的什麼演算法

把一些贊美當成春天我對我的熱情和你的冷漠都失去了把一個和橫店類似的村莊當成故鄉耐心而它們活與不活真的是另外一件事情

6. android 如何獲取保存的圖片的地址 並存到資料庫中

安卓中如何獲取保存的圖片uri 並保存到sqlite資料庫中
有如下兩種方法,僅供參考
方法一:Java代碼

public void saveIcon(Bitmap icon) {
if (icon == null) {
return;
}
// 最終圖標要保存到瀏覽器的內部資料庫中,系統程序均保存為SQLite格式,Browser也不例外,因為圖片是二進制的所以使用位元組數組存儲資料庫的
// BLOB類型
final ByteArrayOutputStream os = new ByteArrayOutputStream();
// 將Bitmap壓縮成PNG編碼,質量為100%存儲
icon.compress(Bitmap.CompressFormat.PNG, 100, os);
// 構造SQLite的Content對象,這里也可以使用
raw ContentValues values = new ContentValues();
// 寫入資料庫的
Browser.BookmarkColumns.TOUCH_ICON欄位 values.put(Browser.BookmarkColumns.TOUCH_ICON, os.toByteArray());
DBUtil.update(....);
//調用更新或者插入到資料庫的方法
}
}

方法二:如果數據表入口時一個content:URIJava代碼

import android.provider.MediaStore.Images.Media;
import android.content.ContentValues;
import java.io.OutputStream;
// Save the name and description of an image in a ContentValues map.
ContentValues values = new ContentValues(3);
values.put(Media.DISPLAY_NAME, "road_trip_1");
values.put(Media.DESCRIPTION, "Day 1, trip to Los Angeles");
values.put(Media.MIME_TYPE, "image/jpeg");
// Add a new record without the bitmap, but with the values just set.
// insert() returns the URI of the new record.
Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
// Now get a handle to the file for that record, and save the data into it.
// Here, sourceBitmap is a Bitmap object representing the file to save to the database.
try {
OutputStream outStream = getContentResolver().openOutputStream(uri);
sourceBitmap.compress(Bitmap.CompressFormat.JPEG, 50, outStream);
outStream.close();
} catch (Exception e) {
Log.e(TAG, "exception while writing image", e);
}
原文請看http://www.bafenbaosoft.com/post/48.html

7. 如何獲取圖像路徑從照片庫以

1.從本地相冊獲取照片:
一般就是寫出這個方法
protected void getImageFromAlbum() {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");//相片類型
startActivityForResult(intent, REQUEST_CODE_PICK_IMAGE);
}

2.從照相機獲取照片
一般就是寫出這個方法
protected void getImageFromCamera() {
String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(getImageByCamera, REQUEST_CODE_CAPTURE_CAMEIA);
}
else {
Toast.makeText(getApplicationContext(), "請確認已經插入SD卡", Toast.LENGTH_LONG).show();
}
}
寫完這個方法後,一般我們還需要通過響應這個方法去獲取圖片

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_PICK_IMAGE) {
Uri uri = data.getData();
//to do find the path of pic

} else if (requestCode == REQUEST_CODE_CAPTURE_CAMEIA ) {
Uri uri = data.getData();
//to do find the path of pic
} }

但是,有時候我們會發現用相機拍攝獲取照片的時候,得到的 uri 是 null 的,這是因為android把拍攝的圖片封裝到bundle中傳遞回來,但是根據不同的機器獲得相片的方式不太一樣,可能有的相機能夠通過
inten.getData()獲取到uri
然後再根據uri獲取數據的路徑,在封裝成bitmap,但有時候有的相機獲取到的是null的,這時候我們該怎麼辦呢?
其實這時候我們就應該從bundle中獲取數據,通過
(Bitmap) bundle.get("data")
獲取到相機圖片的bitmap數據。
為了能夠同時適應上述兩種情況,我們這時候就應該在獲取圖片時做判斷了。我們可以在響應的時候做一個判斷:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_PICK_IMAGE) {
Uri uri = data.getData();
//to do find the path of pic by uri

} else if (requestCode == REQUEST_CODE_CAPTURE_CAMEIA ) {
Uri uri = data.getData();
if(uri == null){
//use bundle to get data
Bundle bundle = data.getExtras();
if (bundle != null) {
Bitmap photo = (Bitmap) bundle.get("data"); //get bitmap
//spath :生成圖片取個名字和路徑包含類型
saveImage(Bitmap photo, String spath);
} else {
Toast.makeText(getApplicationContext(), "err****", Toast.LENGTH_LONG).show();
return;
}
}else{
//to do find the path of pic by uri
}
}
}
後面的過程就需要通過bitmap轉化成相應的圖片文件了。不過得到最終的圖片是被壓縮了的。

public static void saveImage(Bitmap photo, String spath) {
try {
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(spath, false));
photo.compress(Bitmap.CompressFormat.JPEG, 100, bos);
bos.flush();
bos.close();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
這樣就能解決照相機取到的圖片uri為空的狀態了

8. Android中壓縮圖片指定大小

注意看這句話,bit.compress(CompressFormat.PNG, 100, baos);
那裡的數字表示 如果不壓縮是100,表示壓縮率為0。
如果是70,就表示壓縮率是70,表示壓縮30%;
所以你的倒數第二句話表示沒有壓縮。

以下是我壓縮的方法,望採納。

/**
* 圖像壓縮並保存到本地
* 返回處理過的圖片
*
*/
private Bitmap
saveImage(String fileName,Bitmap bit) {

File file = new
File(fileName);
if (!file.exists()) {
try
{
file.createNewFile();
} catch (IOException e)
{
e.printStackTrace();
}
}
try
{
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bit.compress(CompressFormat.JPEG, 70,
stream);
// 70 是壓縮率,表示壓縮30%; 如果不壓縮是100,表示壓縮率為0
FileOutputStream os =
new
FileOutputStream(file);
os.write(stream.toByteArray());
os.close();
return
bit;
} catch (Exception e) {
file = null;
return
null;
}
}

9. 版本過低怎麼升級andoid相冊

Android:三種方法更新手機系統圖庫

在Android設備上處理一張圖片是很常見的,處理完圖片後一般要將其保存到存儲卡中,如果直接執行下面這樣的保存方法,結果是在系統圖庫中無法看到剛才保存圖片。

privatebooleansaveImage(Contextcontext,Bitmapbmp,Stringpath){
//傳入要保存文件的路徑
Filef=newFile(path);
if(f!=null&&!f.getParentFile().exists()){
f.getParentFile().mkdirs();
}
try{
FileOutputStreamout=newFileOutputStream(f);
bmp.compress(Bitmap.CompressFormat.JPEG,100,out);
out.flush();
out.close();
}catch(FileNotFoundExceptione){
e.printStackTrace();
returnfalse;
}catch(IOExceptione){
e.printStackTrace();
returnfalse;
}
returntrue;
}

想要更加方便的查看自己保存的圖片,經常需要更新系統相冊,也就是讓系統相冊重新掃描文件存儲系統,並刷新圖庫,使得用戶能在系統自帶的相冊圖庫中看到新保存入的圖片。

綜合各類資源,總結更新Android設備上系統圖庫的方法,歸納為下面幾種。

//InsertintoMediaStore.
ContentValuesvalues=newContentValues();
values.put(ImageColumns.TITLE,"title");
values.put(ImageColumns.DISPLAY_NAME,"filename.jpg");
values.put(ImageColumns.DATE_TAKEN,System.currentTimeMillis());
values.put(ImageColumns.MIME_TYPE,"image/jpeg");
values.put(ImageColumns.ORIENTATION,0);
values.put(ImageColumns.DATA,path);
values.put(ImageColumns.WIDTH,bmp.getWidth());
values.put(ImageColumns.HEIGHT,bmp.getHeight());
try{
Uriuri=context.getContentResolver().insert(
Images.Media.EXTERNAL_CONTENT_URI,values);
if(uri==null){
Log.e("jileniao.net","FailedtoinsertMediaStore");
}else{
context.sendBroadcast(newIntent(
"com.android.camera.NEW_PICTURE",uri));
}
}catch(Exceptione){
Log.e("jileniao.net","FailedtowriteMediaStore",e);
}
sendBroadcast(newIntent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.parse("file://"+path)));
String[]paths={path};
String[]mimeTypes={"image/jpeg"};
MediaScannerConnection.scanFile(context,paths,mimeTypes,newOnScanCompletedListener(){
@Override
publicvoidonScanCompleted(Stringpath,Uriuri){
}
});
閱讀全文

與androidsaveimage相關的資料

熱點內容
自己購買雲主伺服器推薦 瀏覽:422
個人所得稅java 瀏覽:761
多餘的伺服器滑道還有什麼用 瀏覽:192
pdf劈開合並 瀏覽:29
不能修改的pdf 瀏覽:752
同城公眾源碼 瀏覽:489
一個伺服器2個埠怎麼映射 瀏覽:298
java字元串ascii碼 瀏覽:79
台灣雲伺服器怎麼租伺服器 瀏覽:475
旅遊手機網站源碼 瀏覽:332
android關聯表 瀏覽:946
安卓導航無聲音怎麼維修 瀏覽:333
app怎麼裝視頻 瀏覽:431
安卓系統下的軟體怎麼移到桌面 瀏覽:96
windows拷貝到linux 瀏覽:772
mdr軟體解壓和別人不一樣 瀏覽:904
單片機串列通信有什麼好處 瀏覽:340
游戲開發程序員書籍 瀏覽:860
pdf中圖片修改 瀏覽:288
匯編編譯後 瀏覽:491