使用Android系統(tǒng)相機(jī)捕獲圖片(一)

寫文章的目的

  1. 靜下心來學(xué)習(xí)
  2. 知識(shí)點(diǎn)的積累
  3. 總結(jié),做筆記

導(dǎo)讀

個(gè)人認(rèn)為系統(tǒng)相機(jī)捕獲圖片是一個(gè)復(fù)合功能點(diǎn)钟哥,包括調(diào)用相機(jī)、拍照鄙信、返回圖片瞪醋,還要考慮實(shí)際的應(yīng)用場(chǎng)景:如手機(jī)版本等,因此會(huì)分為幾篇文章去講解装诡,由簡(jiǎn)入繁银受。每一篇主體是示例代碼,通過代碼去理解這個(gè)功能鸦采。

需求

  • 調(diào)用系統(tǒng)相機(jī)
  • 返回圖片
  • 顯示圖片

代碼解構(gòu)

1.調(diào)用系統(tǒng)相機(jī):使用Intent方式宾巍,action使用的是MediaStore.ACTION_IMAGE_CAPTURE∮娌看到這么長(zhǎng)的參數(shù)可能會(huì)很慌顶霞,其實(shí)不用著急。MediaStore是一個(gè)Media provider锣吼,包含內(nèi)部存儲(chǔ)和外部存儲(chǔ)的媒體元數(shù)據(jù)选浑。ACTION_IMAGE_CAPTURE里面單詞也很簡(jiǎn)單:圖片捕獲。那么整個(gè)其實(shí)也就能理解了:相機(jī)就是用來拍照的玄叠,拍照也就是捕獲圖片古徒,拍完后需要存儲(chǔ)。廢話少說读恃,直接上代碼隧膘。

//創(chuàng)建intent ,設(shè)置action
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//調(diào)用相機(jī)
startActivityForResult(intent, IMAGE_RESULT);

2.返回圖片并顯示:既然使用startActivityForResult寺惫,當(dāng)然要用onActivityResult去接收疹吃。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode != RESULT_OK ){
              return;
        }
        if(requestCode == IMAGE_RESULT){
              //通過data獲取bundle數(shù)據(jù)
              Bundle extras = data.getExtras();
              //拍照后系統(tǒng)會(huì)返回一個(gè)bitmap,key是data西雀。(沒有找到常量去代替data)
              Bitmap bitmap = (Bitmap) extras.get("data");
              //顯示圖片
              imageView.setImageBitmap(bitmap);
        }
}

3.顯示結(jié)果:會(huì)發(fā)現(xiàn)只顯示了一點(diǎn)點(diǎn)萨驶??艇肴?并不是我的ImageView只用這么大篡撵,而是返回的圖片只用這么一點(diǎn)判莉。可以在獲取打印bitmap 的寬高驗(yàn)證一下育谬。


Screenshot_20181107-101719.jpg

總結(jié)

那么,使用系統(tǒng)相機(jī)捕獲圖片最簡(jiǎn)單的樣例就講完了帮哈√盘矗可能會(huì)有疑問:這么一點(diǎn)圖片有什么用?圖片太小看的我眼睛疼娘侍,我需要大圖又該怎么實(shí)現(xiàn)咖刃?請(qǐng)聽下回分解。

代碼樣例

1.xml代碼

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="capture_image"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageView
        android:id="@+id/iv"
        android:layout_marginTop="30dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btn" />


</android.support.constraint.ConstraintLayout>

2.java代碼

package com.rflash.captrueimage01;

import android.content.Intent;
import android.graphics.Bitmap;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button button;
    private ImageView imageView;

    private final int IMAGE_RESULT = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = findViewById(R.id.btn);
        imageView = findViewById(R.id.iv);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        switch (id) {
            case R.id.btn:
                //打開相機(jī)
                openCameraForResult();
                break;
        }
    }

    /**
     * 打開相機(jī)
     */
    private void openCameraForResult() {
        //創(chuàng)建intent 憾筏,設(shè)置action
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        //調(diào)用相機(jī)
        startActivityForResult(intent, IMAGE_RESULT);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode != RESULT_OK) {
            return;
        }
        if (requestCode == IMAGE_RESULT) {
            //通過data獲取bundle數(shù)據(jù)
            Bundle extras = data.getExtras();
            //拍照后系統(tǒng)會(huì)返回一個(gè)bitmap嚎杨,key是data。(沒有找到常量去代替data)
            Bitmap bitmap = (Bitmap) extras.get("data");
            //打印bitmap寬高
            Log.d("--width", bitmap.getWidth() + "");
            Log.d("--height", bitmap.getHeight() + "");
            //顯示圖片
            imageView.setImageBitmap(bitmap);
        }
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末氧腰,一起剝皮案震驚了整個(gè)濱河市枫浙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌古拴,老刑警劉巖箩帚,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異黄痪,居然都是意外死亡紧帕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門桅打,熙熙樓的掌柜王于貴愁眉苦臉地迎上來是嗜,“玉大人,你說我怎么就攤上這事挺尾《焯拢” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵潦嘶,是天一觀的道長(zhǎng)涩嚣。 經(jīng)常有香客問我,道長(zhǎng)掂僵,這世上最難降的妖魔是什么航厚? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮锰蓬,結(jié)果婚禮上幔睬,老公的妹妹穿的比我還像新娘。我一直安慰自己芹扭,他們只是感情好麻顶,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布赦抖。 她就那樣靜靜地躺著,像睡著了一般辅肾。 火紅的嫁衣襯著肌膚如雪队萤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天矫钓,我揣著相機(jī)與錄音要尔,去河邊找鬼。 笑死新娜,一個(gè)胖子當(dāng)著我的面吹牛赵辕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播概龄,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼还惠,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了私杜?” 一聲冷哼從身側(cè)響起蚕键,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎歪今,沒想到半個(gè)月后嚎幸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寄猩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年嫉晶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片田篇。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡替废,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泊柬,到底是詐尸還是另有隱情椎镣,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布兽赁,位于F島的核電站状答,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏刀崖。R本人自食惡果不足惜惊科,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望亮钦。 院中可真熱鬧馆截,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至窖张,卻和暖如春幕随,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背荤堪。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工合陵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人澄阳。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像踏拜,于是被迫代替她去往敵國(guó)和親碎赢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359