Android學習之呼叫系統相機拍照、截圖並儲存
版權宣告:本文為博主原創文章,轉載請註明出處http://blog.csdn.net/u013132758。 https://blog.csdn.net/u013132758/article/details/49912643
最近寫一款拍照的APP用到了拍照,截圖,並返回ImageView。網上找了好幾種fang法,發現最好還是呼叫系統自帶的,既簡單又方便。
啟用android 系統相機
intent =new
Intent(MediaStore.ACTION_IMAGE_CAPTURE);
啟用android截圖
intent = new Intent("com.android.camera.action.CROP");//動作-裁剪
下面是我的程式碼
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Environment;
import android.provider.MediaStore;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.net.Uri;
import android.widget.TextView;
import android.widget.Toast;
import com.soundcloud.android.crop.Crop;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
import me.qincai.newton.R;
import me.qincai.newton.listener.NavigationFinishClickListener;
import me.qincai.newton.util.Utils;
public class MainActivity extends AppCompatActivity implements Toolbar.OnMenuItemClickListener {
private static final int REQUEST_IMAGE_CAPTURE = 330;
private static File photoFile;
private static File cropFile;
public static String crop;
public static String crop1;
@Bind(R.id.main_toolbar)
protected Toolbar toolbar;
@Bind(R.id.tv_register)
protected TextView tv_register;
@Bind(R.id.btn_capture)
protected com.rey.material.widget.Button btn_capture;
private static final int REQUEST_CROP = 332;
public static final int REQUEST_LOGIN = 331;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
toolbar.setNavigationOnClickListener(new NavigationFinishClickListener(this));
toolbar.inflateMenu(R.menu.menu_main);
toolbar.setOnMenuItemClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onMenuItemClick(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
switch (id) {
case R.id.action_user:
if (Utils.isLogin()) {
Intent intent = new Intent(MainActivity.this, ProfileActivity.class);
startActivity(intent);
} else {
Utils.loginRequired(MainActivity.this);
}
return true;
case R.id.action_questions:
Intent intent = new Intent(MainActivity.this, QuestionsActivity.class);
startActivity(intent);
return true;
default:
return false;
}
}
@OnClick(R.id.btn_capture)
public void onCapture() {
// 未登陸則引導登陸
if (!Utils.isLogin()) {
Utils.loginRequired(MainActivity.this);
} else {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(getPackageManager()) != null) {
try {
photoFile = createImageFile();
} catch (IOException e) {
Toast.makeText(this, "寫入圖片出錯", Toast.LENGTH_SHORT).show();
}
if (photoFile != null) {
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
}
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data == null)
if (resultCode != RESULT_OK)
return;
switch (requestCode) {
case REQUEST_IMAGE_CAPTURE:
Uri u = Uri.fromFile(photoFile);
cropPhoto(u);
break;
case REQUEST_CROP:
Log.e("截圖成功onActivityResult", "data is " + data.toString());
handleCrop();
break;
case REQUEST_LOGIN:
break;
}
}
public void cropPhoto(Uri uri) {
try {
cropFile = createImageFile();
}catch (IOException e)
{
Log.e("jianliwenjiancuowu","sedfwedf");
}
if (uri == null) {
return;
}
Intent intent = new Intent("com.android.camera.action.CROP");//動作-裁剪
intent.setDataAndType(uri, "image/*");//型別
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(cropFile));//// 輸出檔案
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());// 輸出格式
intent.putExtra("crop", true);
intent.putExtra("scale", true);// 縮放
intent.putExtra("scaleUpIfNeeded", true);// 如果小於要求輸出大小,就放大
intent.putExtra("return-data", false);// 不返回縮圖
intent.putExtra("noFaceDetection", true);// 關閉人臉識別
startActivityForResult(intent,REQUEST_CROP);
}
private void handleCrop() {
Intent intent = new Intent(MainActivity.this, PreviewActivity.class);
intent.putExtra("image_cropped_file", cropFile.toString());
startActivity(intent);
}
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date());
String imageFileName = "QC_" + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
// Save a file: path for use with ACTION_VIEW intents
return image;
}
@OnClick(R.id.tv_register)
protected void onRegisterClick() {
Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
startActivity(intent);
}
}
這就是簡單的呼叫系統相機,如果大家有興趣想自定義一個相機的話,可以看一看我的這篇部落格:【Android 開發】SufaceView自定義相機拍照
相關文章
- Android呼叫系統相簿和相機拍照Android
- Android 呼叫系統相機拍照 . 選取本地相簿Android
- android7.0以上呼叫系統相機拍照並顯示到ImageView上AndroidView
- Android:呼叫系統相機實現拍照+裁切(相容7.0以上系統)Android
- Android中呼叫攝像頭拍照儲存,並在相簿中選擇圖片顯示Android
- C# 截圖並儲存為圖片C#
- Android開發獲取相機拍照的原圖(並非縮圖)Android
- Android呼叫系統相機,相容7.0系統Android
- Android上傳圖片之呼叫系統拍照和從相簿選擇圖片Android
- 對html進行截圖並儲存為本地圖片HTML地圖
- win10系統下截圖儲存位置在哪裡Win10
- Android儲存圖片到系統相簿Android
- [Mac學習]之系統自帶軟體截圖快捷鍵Mac
- Android 儲存系統之原始碼篇Android原始碼
- Android 儲存系統之架構篇Android架構
- win10系統遊戲截圖儲存在哪_如何開啟win10遊戲截圖儲存位置Win10遊戲
- Android 呼叫相簿 拍照 實現系統控制元件縮放 切割圖片Android控制元件
- 關於android中呼叫系統拍照,返回圖片是旋轉90度..Android
- Android呼叫攝像頭拍照並顯示照片Android
- Win10系統截圖後不能儲存的解決方法Win10
- 儲存學習之開源儲存軟體
- Android——儲存圖片到外部儲存並進行原生分享Android
- 2┃音視訊直播系統之瀏覽器中通過 WebRTC 拍照片加濾鏡並儲存瀏覽器Web
- Android 拍照、選擇圖片並裁剪Android
- 照片系列之android呼叫攝像頭拍照Android
- Android開發之呼叫攝像頭拍照Android
- 短視訊程式開發,Android:呼叫系統拍照和相簿Android
- 儲存系統設計指南之儲存分類
- mysql dba系統學習(20)mysql儲存引擎MyISAMMySql儲存引擎
- python+selenium 截圖儲存Python
- Android將view儲存為圖片並放在相簿中AndroidView
- 適配Android4.4~Android11,呼叫系統相機,系統相簿,系統圖片裁剪,轉換檔案(對圖片進行上傳等操作)Android
- 儲存學習
- iOS中 讀取相簿,呼叫系統相機iOS
- CUDA 學習筆記之儲存器筆記
- 在Android中呼叫攝像頭拍照並顯示出來Android
- mysql dba系統學習(20)mysql儲存引擎MyISAM薦MySql儲存引擎
- 淘寶圖片儲存系統架構架構