當前位置:首頁 » 安卓系統 » android圖片獲取

android圖片獲取

發布時間: 2022-08-10 09:45:15

Ⅰ Android開發中,如何在靜態類中使用getResources()獲取圖片資源.

獲取resource需要context對象,所以你這個問題有如下幾個解決思路
1,使用Context作為參數,例如public
static
getResourcesStatic(Context
context,
int
resId)
2,使用Context作為成員變數,在構造函數中接受一個Context參數,並賦值給自己成員變數
這樣在此對象生命期內,都可以使用.
不過並不推薦這種做法,因為傳入的Context多數情況下是Activity,往往會附著很多資源,如背景圖片等,無法GC,導致過高的內存佔用.可以用下面的改進方式:
3,使用WeakReference
保存context的弱引用
使用時要注意判斷ref.get()是否為null

Ⅱ android 如何獲取遠程文件的內所有圖片

大家都知道,在android應用中UI線程5秒沒響應的話就會拋出無響應異常,對於遠程獲取大的資源來說,這種異常還是很容易就會拋出來的,那麼怎麼避免這種問題的產生。在android中提供兩種方法來做這件事情:
啟動一個新的線程來獲取資源,完成後通過Handler機制發送消息,並在UI線程中處理消息,從而達到在非同步線程中獲取圖片,然後通過Handler Message來更新UI線程的過程。
使用android中提供的AsyncTask來完成。

具體的做法這里就不介紹了,查下API就可以了,或者是google、下。這里主要來說本地緩存
本地緩存
對於圖片資源來說,你不可能讓應用每次獲取的時候都重新到遠程去下載(ListView),這樣會浪費資源,但是你又不能讓所有圖片資源都放到內存中去(雖然這樣載入會比較快),因為圖片資源往往會佔用很大的內存空間,容易導致OOM。那麼如果下載下來的圖片保存到SDCard中,下次直接從SDCard上去獲取呢?這也是一種做法,我看了下,還是有不少應用採用這種方式的。採用LRU等一些演算法可以保證sdcard被佔用的空間只有一小部分,這樣既保證了圖片的載入、節省了流量、又使SDCard的空間只佔用了一小部分。另外一種做法是資源直接保存在內存中,然後設置過期時間和LRU規則。
sdcard保存:

在sdcard上開辟一定的空間,需要先判斷sdcard上剩餘空間是否足夠,如果足夠的話就可以開辟一些空間,比如10M
當需要獲取圖片時,就先從sdcard上的目錄中去找,如果找到的話,使用該圖片,並更新圖片最後被使用的時間。如果找不到,通過URL去download
去伺服器端下載圖片,如果下載成功了,放入到sdcard上,並使用,如果失敗了,應該有重試機制。比如3次。
下載成功後保存到sdcard上,需要先判斷10M空間是否已經用完,如果沒有用完就保存,如果空間不足就根據LRU規則刪除一些最近沒有被用戶的資源。
關鍵代碼:
保存圖片到SD卡上

Ⅲ android怎麼獲取圖片的大小

1、控制大小和位置

/*
* 獲取對話框的窗口對象及參數對象以修改對話框的布局設置,
* 可以直接調用getWindow(),表示獲得這個Activity的Window
* 對象,這樣這可以以同樣的方式改變這個Activity的屬性.
*/
Window dialogWindow = dialog.getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
dialogWindow.setGravity(Gravity.LEFT | Gravity.TOP);

/*
* lp.x與lp.y表示相對於原始位置的偏移.
* 當參數值包含Gravity.LEFT時,對話框出現在左邊,所以lp.x就表示相對左邊的偏移,負值忽略.
* 當參數值包含Gravity.RIGHT時,對話框出現在右邊,所以lp.x就表示相對右邊的偏移,負值忽略.
* 當參數值包含Gravity.TOP時,對話框出現在上邊,所以lp.y就表示相對上邊的偏移,負值忽略.
* 當參數值包含Gravity.BOTTOM時,對話框出現在下邊,所以lp.y就表示相對下邊的偏移,負值忽略.
* 當參數值包含Gravity.CENTER_HORIZONTAL時
* ,對話框水平居中,所以lp.x就表示在水平居中的位置移動lp.x像素,正值向右移動,負值向左移動.
* 當參數值包含Gravity.CENTER_VERTICAL時
* ,對話框垂直居中,所以lp.y就表示在垂直居中的位置移動lp.y像素,正值向右移動,負值向左移動.
* gravity的默認值為Gravity.CENTER,即Gravity.CENTER_HORIZONTAL |
* Gravity.CENTER_VERTICAL.
*
* 本來setGravity的參數值為Gravity.LEFT | Gravity.TOP時對話框應出現在程序的左上角,但在
* 我手機上測試時發現距左邊與上邊都有一小段距離,而且垂直坐標把程序標題欄也計算在內了,
* Gravity.LEFT, Gravity.TOP, Gravity.BOTTOM與Gravity.RIGHT都是如此,據邊界有一小段距離
*/
lp.x = 100; // 新位置X坐標
lp.y = 100; // 新位置Y坐標
lp.width = 300; // 寬度
lp.height = 300; // 高度
lp.alpha = 0.7f; // 透明度

// 當Window的Attributes改變時系統會調用此函數,可以直接調用以應用上面對窗口參數的更改,也可以用setAttributes
// dialog.onWindowAttributesChanged(lp);
dialogWindow.setAttributes(lp);

/*
* 將對話框的大小按屏幕大小的百分比設置
*/
// WindowManager m = getWindowManager();
// Display d = m.getDefaultDisplay(); // 獲取屏幕寬、高用
// WindowManager.LayoutParams p = getWindow().getAttributes(); // 獲取對話框當前的參數值
// p.height = (int) (d.getHeight() * 0.6); // 高度設置為屏幕的0.6
// p.width = (int) (d.getWidth() * 0.65); // 寬度設置為屏幕的0.95
// dialogWindow.setAttributes(p);

Ⅳ 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

Ⅳ Android如何從伺服器獲取圖片

  • 直接獲取bitmap對象

  • //傳輸網路圖片

  • publicBitmapgetPic(StringuriPic){

  • URLimageUrl=null;

  • Bitmapbitmap=null;

  • try{

  • imageUrl=newURL(uriPic);

  • }catch(MalformedURLExceptione){

  • e.printStackTrace();

  • }

  • try{

  • HttpURLConnectionconn=(HttpURLConnection)imageUrl

  • .openConnection();

  • conn.connect();

  • InputStreamis=conn.getInputStream();

  • bitmap=BitmapFactory.decodeStream(is);

  • is.close();

  • }catch(IOExceptione){

  • e.printStackTrace();

  • }

  • returnbitmap;

  • }

Ⅵ 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中的完整圖像 } } } }

Ⅶ android中怎麼跳轉到相冊獲取照片並得到url

方法/步驟
1
如下圖所示,需要根據URL地址獲取圖片載入到圖中Anroid機器人所在的位置,這是運行前的效果:

2
首先需根據URL地址獲取圖片,如下所示,urladdr即為圖片地址,返回Drawable對象:
//download image from network using @urladdress
private Drawable loadImageFromNetwork(String urladdr) {
// TODO Auto-generated method stub
Drawable drawable = null;
try{
//judge if has picture locate or not according to filename
drawable = Drawable.createFromStream(new URL(urladdr).openStream(), "image.jpg");
}catch(IOException e){
Log.d("test",e.getMessage());
}
if(drawable == null){
Log.d("test","null drawable");
}else{
Log.d("test","not null drawable");
}
return drawable;
}
3
獲取到圖片後,需要更新主線程UI資源,考慮到時間以及界面反應延遲等,所以採用線程加以處理,如下圖所示:
// image
new Thread(new Runnable(){
Drawable drawable = loadImageFromNetwork(urladdress);
@Override
public void run(){
//post() is quite important,update pictures in UI main thread
image.post(new Runnable(){
@Override
public void run(){
//TODO Auto-generated method stub
image.setImageDrawable(drawable);
}
});
}

//download image from network using @urladdress
private Drawable loadImageFromNetwork(String urladdr) {
//... 略(如 1 中所示)
}
}).start(); //線程啟動
4
說明:在上述示例代碼中,image是ImageView類的一個對象,也就是APP中的一個顯示圖像組件,利用獲取到的圖片drawable去更新image,運行效果如下所示:

Ⅷ 求:android 獲取系統相冊圖片並顯示在當前頁面的代碼

先初始化;

注意自定義 的

private final String IMAGE_TYPE = "image/*";private final int IMAGE_CODE = 0;


private void setImage() {
Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT); getAlbum.setType(IMAGE_TYPE); startActivityForResult(getAlbum, IMAGE_CODE);}
這里使用Intent獲得相冊圖片數據,並返回原來界面;

這里說明一下

startActivityForResult(getAlbum, IMAGE_CODE);

補充{

startActivityForResult與startActivity的不同之處在於:
1、startActivity( )
僅僅是跳轉到目標頁面,若是想跳回當前頁面,則必須再使用一次startActivity( )。
2、startActivityForResult( )
可以一次性完成這項任務,當程序執行到這段代碼的時候,假若從T1Activity跳轉到下一個Text2Activity,而當這個Text2Activity調用了finish()方法以後,程序會自動跳轉回T1Activity,並調用前一個T1Activity中的onActivityResult( )方法。

}

startActivityForResult(getAlbum, IMAGE_CODE);

這里採用startActivityForResult來做跳轉,此處的IMAGE_CODE實質是0為一個依據,可以寫其他的值,但一定要>=0

然後重寫onActivityResult用於接收剛剛得到的數據

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Bitmap bm = null; ContentResolver resolver = getContentResolver(); if (requestCode == IMAGE_CODE) { try {
Uri originalUri = data.getData(); bm = MediaStore.Images.Media.getBitmap(resolver, originalUri); imgShow.setImageBitmap(bm); } catch (IOException e) {
e.printStackTrace(); }
}

補充{
ContentProvider-----數據提供給第三方應用程序使用時使用
因為在Android系統裡面,資料庫是私有的。一般情況下外部應用程序是沒有許可權讀取其他應用程序的數據。如果你想公開你自己的數據,你有兩個選擇:你可以創建你自己的內容提供器(一個ContentProvider子類)或者你可以給已有的提供器添加數據-如果存在一個控制同樣類型數據的內容提供器且你擁有寫的許可權
}
這里是創建一個新的內容提供器,然後在Activity當中通過getContentResolver()可以得到當前應用的 ContentResolver實例

if (requestCode == IMAGE_CODE) {
resultCode為回傳的標記這句話是在確認是否回傳的是你所需要的;如果是就執行try;不然就執行catch (IOException e) {
e.printStackTrace();}先說這里當try語句中出現異常是時,會執行catch中的語句,IOException e也就是實例化Exception類型的對象。e是此對象引用名稱。然後e(引用)會自動調用Exception類中指定的方法,也就出現了e.printStackTrace() ;。printStackTrace()方法的意思是:在命令行列印異常信息在程序中出錯的位置及原因。
try {
Uri originalUri = data.getData(); bm = MediaStore.Images.Media.getBitmap(resolver, originalUri); imgShow.setImageBitmap(bm);接收數據處理數據並顯示照片。
然後進行測試。


另附源碼
MainActivity:
package com.example.administrator.myapplication1;import android.graphics.BitmapFactory;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import java.io.IOException;import android.net.Uri;import android.os.Bundle;import android.provider.MediaStore;import android.app.Activity;import android.content.ContentResolver;import android.content.Intent;import android.graphics.Bitmap;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;public class MainActivity extends AppCompatActivity { private final String IMAGE_TYPE = "image/*"; private final int IMAGE_CODE = 0; private Button choose=null; private ImageView imgShow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init();} private void init() { choose=(Button) findViewById(R.id.button1); imgShow=(ImageView) findViewById(R.id.imgShow); choose.setOnClickListener(listener); } private OnClickListener listener=new OnClickListener(){ @Override public void onClick(View v) {
setImage(); }

}; private void setImage() {
Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT); getAlbum.setType(IMAGE_TYPE); startActivityForResult(getAlbum, IMAGE_CODE); } protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Bitmap bm = null; ContentResolver resolver = getContentResolver(); if (requestCode == IMAGE_CODE) { try {
Uri originalUri = data.getData(); bm = MediaStore.Images.Media.getBitmap(resolver, originalUri); imgShow.setImageBitmap(bm); } catch (IOException e) {
e.printStackTrace(); }
}
}
}


layout:activity_main.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="選擇照相" android:layout_marginRight="190dp" android:layout_marginTop="8dp" android:paddingBottom="2dp" android:background="#aabbcc" /> <ImageView android:id="@+id/imgShow" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="15dip" /></LinearLayout>

Ⅸ Android中 怎麼獲取apk中的素材圖片

有些APK程序里的圖標、圖片很漂亮,在使用程序時你可能會想,如果能把這些漂亮的圖標、圖片提取出來就好了,其實這是可以辦到的,請看教程。

更多例子請參考android學習手冊,裡面有源碼。android學習手冊包含9個章節,108個例子,源碼文檔隨便看,例子都是可交互,可運行,源碼採用android studio目錄結構,高亮顯示代碼,文檔都採用文檔結構圖顯示,可以快速定位。360手機助手中下載,圖標上有貝殼

本教程以「電影超人」的APK安裝包為例,其它APK程序的提取方法基本相同。以下內容需要在電腦中進行操作。

1.用壓縮軟體打開APK

APK程序其實就是個ZIP壓縮包,想提取其中的資源就得先用解壓縮軟體將其打開,如圖我們在APK安裝包上右鍵、打開方式、選擇壓縮軟體,我這里選擇的是RAR,如果你安裝的是其它的解壓縮軟體,選擇它即可。如果你以前沒有用壓縮軟體打開過APK文件,可以點擊選擇默認程序然後找到解壓縮軟體進行打開。

2.解壓圖片文件夾

用解壓縮軟體打開APK程序後,如圖裡面有幾個文件夾,我們拖出「res」這個文件,一般APK程序的圖片資源都在這個文件中。

3.尋找需要的圖片

把「res」文件夾解壓後我們打開可以看到裡面的幾個文件夾一般程序圖標等圖片都在「drawable-hdpi」這個文件夾,打開看看,是不是有自己需要的東西,如果沒有再到其它的幾個文件夾中查找一下。APK文件里的圖片都是png格式的,可直接查看,這點比水果要厚道了許多。

4.反編譯查找資源

也許大家發現了,解壓後「電影超人」里大量的電影圖片並沒有看到,那是因為APK程序製作時把它們編譯到了「resources.arsc」文件里我們想提取的話把APK文件進行反編譯就可以了。具體反編譯方法這里就不講解了,請自行網路。

Ⅹ 安卓開發 如何獲取網路中的圖片

用自帶的HttpClient,下面是我自己的庫裡面取出來的一個方法,我是非同步ajax調用的,你要是自己用的話,把那些非同步回調的去掉就行了。
url傳入圖片地址,outputFile是輸出的文件對象,也就是說,要你先指定保存的文件位置。
只要沒限制外鏈的圖片文件應該都沒問題。
/**

* 下載文件

* @param url

* @param outPut

* @param listener

* @throws AjaxException

*/

public static Responses downLoad(String url, AjaxParameters params,File outputFile, TransmitProgressLitener uploadListener) throws AjaxException{

if(params.size()>0){

url = url + "?" + Utils.encodeUrl(params);

}

Utils.amLog(url);

//httpGet連接對象

HttpGet httpRequest = new HttpGet(url);

//取得HttpClient 對象

//HttpClient httpclient = new DefaultHttpClient();

HttpClient httpclient = getNewHttpClient();

InputStream is = null;

OutputStream os= null;

try {

//請求httpClient ,取得HttpRestponse

HttpResponse httpResponse = httpclient.execute(httpRequest);

if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){

//取得相關信息 取得HttpEntiy

HttpEntity httpEntity = httpResponse.getEntity();

//獲得一個輸入流

is = httpEntity.getContent();

os = new FileOutputStream(outputFile,true);

long downloaded = 0;

byte[] buffer=new byte[IO_CACHE_SIZE];

while(true){

int count=is.read(buffer);

if(count==-1){

break;

}

os.write(buffer, 0, count);

if(null!=uploadListener){

downloaded +=count;

uploadListener.updateProgress(downloaded, 0);

}

}

}

return new Responses("download suc",((DefaultHttpClient)httpclient).getCookieStore(),((DefaultHttpClient)httpclient).getCookieSpecs());

} catch (ClientProtocolException e) {

// TODO Auto-generated catch block

e.printStackTrace();

throw new AjaxException(e);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

throw new AjaxException(e);

} finally{

if(null!=is){

try {

is.close();

} catch (IOException e) {

throw new AjaxException(e);

}

}

if(null!=os){

try {

os.close();

} catch (IOException e) {

throw new AjaxException(e);

}

}

}

}

熱點內容
android交叉編譯環境 發布:2024-04-20 13:00:10 瀏覽:182
伺服器怎麼搭建中間層 發布:2024-04-20 12:40:02 瀏覽:96
如何獲取網路的賬號和密碼 發布:2024-04-20 12:34:06 瀏覽:919
安卓現在哪個品牌用得最久 發布:2024-04-20 12:00:50 瀏覽:276
小拇指演算法 發布:2024-04-20 11:55:28 瀏覽:954
域名查看雲伺服器ip地址 發布:2024-04-20 11:49:17 瀏覽:551
反編譯軟體id 發布:2024-04-20 10:29:49 瀏覽:44
視頻太長怎麼壓縮發微信 發布:2024-04-20 10:00:14 瀏覽:384
顯卡怎麼保存配置 發布:2024-04-20 09:28:52 瀏覽:596
校園交易網站源碼 發布:2024-04-20 09:18:54 瀏覽:701