SlideShare a Scribd company logo
ANDROID HACKS #30  カメラを使う 担当:  Tatsuki Higashi Twitter : @htk16 09/19/11
この資料について この資料は下記の本をベースに勉強会で作成した資料です。 『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー・ジャパン刊) この本の紹介ページが下記にあります。 http://www.oreilly.co.jp/books/9784873114569/ 09/19/11
アジェンダ カメラからの情報を取得する カメラの画像を画面に表示する Hack をさらに Hack する カメラの画像をファイルに保存する (写真を撮る) プレビュー画像を取得する 09/19/11
0.  始める前に 自分の環境だけかもしれないが, Hack30 のサンプルはそのまま ビルドできませんでした. -> src ディレクトリ以下の .svn ディレクトリを削除して対応 09/19/11
1.  カメラからの情報を取得する 09/19/11
1.  カメラからの情報を取得 カメラを使えるようにする AndroidManifest.xml  の manifest タグに以下を追加 <uses-permission android:name= &quot;android.permission.CAMERA&quot; /> 必要ならば,カメラの機能を有効にする <uses-feature android:name=&quot;android.hardware.camera&quot; /> <uses-feature android:name=&quot;android.hardware.camera.autofocus&quot; /> 前者はカメラを使うならば必要? 09/19/11
1.  カメラからの情報を取得 カメラ利用の流れ Camera.open:  カメラのインスタンス取得 Camera.getParameter:  カメラの各種パラメータ取得 Camera.Parameter  型でパラメータを返す Camera.setParameter:  必要ならば,パラメータ変更  Camera.setCameraOrientation:  必要ならば,角度の補正 Camera.setPreviewDisplay :  初期化された  SurfaceHolder  を渡す これをやらないと preview ができない Camera.startPreview :  カメラの映像で  Surface を更新し始める Camera.stopPreview: preview を停止する Camera.release :  カメラを返却する 09/19/11
1.  カメラからの情報を取得 解像度を変更する Camera.Parameter.setPreviewSize(int width, int height) Camera.getParameter  でカメラのパラメータを取得 Camera.Parameter.setPreviewSize でパラメータ変更 Camera.setParameter  で変更したパラメータを設定 Activity のサイズ変更に追従して変更する場合は 以下の callback メソッド内で行うのが良い Activity.surfaceChanged(SurfaceHolder h, int format,   int width, int height) 09/19/11
1.  カメラからの情報を取得 SurfaceHolder 4 種類の surface が利用可 SURFACE_TYPE_GPU GPU 描画に対応した surface  非推奨 SURFACE_TYPE_HARDWARE DMA 転送に対応したハードウェア surface  非推奨 SURFACE_TYPE_NORMAL 通常(?)の surface SURFACE_TYPE_PUSH_BUFFERS buffer を持たない surface  カメラで使うのはこの種類 SurfaceHolder.addCallback callback interface になる activity などを追加する 09/19/11
1.  カメラからの情報を取得 CameraPreview (例 30-1  29 〜 79) SurfaceView の派生クラス コンストラクタで  SurfaceHolder を作成し, CameraPreview をその callback interface として登録 CameraPreview.surfaceCreated カメラに preview surface を与える CameraPreview.surfaceChanged カメラの解像度を変更 CameraPreview.surfaceDestroyed 後始末 MainActivity  ( 例 30-1 13 〜 74 ) onCreate で CameraPreview のインスタンスを ContentView として指定 09/19/11
2. Hack をさらに Hack する -  カメラ画像をファイルに保存 09/19/11
2.  カメラ画像を保存 カメラ利用の流れ カメラのインスタンス取得 カメラの各種パラメータ取得 必要ならば,パラメータ変更  必要ならば,角度の補正 初期化された  SurfaceHolder  を渡す カメラの映像で  Surface を更新し始める 画像をキャプチャする Camera.takePicture :  静止画像を取得 Camera.startPreview:  カメラの更新を再開 preview を停止する カメラを返却する 09/19/11
2.  カメラ画像を保存 Camera.takePicture(Camera.ShutterCallback shutter,  Camera.PictureCallback raw, Camera.PictureCallback postview, Camera.PictureCallback jpeg) shutter:  シャッターが押されたときの callback interface Camera.ShutterCallback.onShutter raw:  処理前画像を取得したときの callback interface Camera.ShutterCallback.onPictureTaken postview: postview image  を取得したときの interface ? 基本的には null を与える jpeg: jpeg 画像を取得した際の  callback interface Camera.ShutterCallback.onPictureTaken 09/19/11
2.  カメラ画像を保存 Camera.ShutterCallback.onPictureTaken(byte[] data,   Camera cam) data: raw の callback interface  なら未処理画像,      jpeg なら jpeg 圧縮された画像のバイナリデータ 09/19/11
2.  カメラ画像を保存 jpeg 画像のキャプチャ  ( 図 30-2) MainWithShutterActivity.onTouchEvent  ( 図 30-2 77 〜 90) 画面を押し込んだなら画面をキャプチャ Camera.takePicture でキャプチャ shutter, raw には何もしない interface を与える jpeg には画像をファイルに書き出す interface を与える Camera.startPreview で preview を再開 画面の押し込み以外のイベントならデフォルトの処理を行う 09/19/11
3.  プレビュー画像を取得する 09/19/11
3.  プレビュー画像を取得する Camera.setPreviewCallback(Camera.PrevieCallback cb): カメラがプレビュー画像を取得した時に呼ばれる callback interface を指定する Camera.PreviewCallback.onPreviewFrame(byte[] data,    Camera cam) プレビューが更新されたときに呼ばれる data:  プレビュー画像  (YUV420SP 形式) Bitmap 画像の保存  ( 図 30-3) プレビューが更新されるたびにその画像をメモリ上に保持 画面がタッチされたら保持しているデータから bitmap 画像を作成 この処理は時間がかかるので,別スレッドで実行 09/19/11
参考 URL Android Developers | Camera http://developer.android.com/reference/android/hardware/Camera.html 09/19/11

Recommended

JCROM で Android の「真の力」を解き放て
JCROM で Android の「真の力」を解き放て
android sola
 
Android カスタムROMの作り方
Android カスタムROMの作り方
Masahiro Hidaka
 
カスタムROM開発者の視点から見たAndroid
カスタムROM開発者の視点から見たAndroid
android sola
 
はじめてのAndroid開発
はじめてのAndroid開発
Katsumi Honda
 
私の欲しい Android 端末
私の欲しい Android 端末
android sola
 
GT1 輪講資料 Unity Standard asset Camera
GT1 輪講資料 Unity Standard asset Camera
Masujima Ryohei
 
Camera API 3.0を触ってみた
Camera API 3.0を触ってみた
Masaki Otsuki
 
Android Hacks - Hack31
Android Hacks - Hack31
Masanori Ohkawara
 
Android Hacks - Hack11
Android Hacks - Hack11
Masanori Ohkawara
 
Android Hacks - Hack18 ~ Hack20
Android Hacks - Hack18 ~ Hack20
Masanori Ohkawara
 
Android Hacks - Hack59
Android Hacks - Hack59
Masanori Ohkawara
 
Android Hacks - Hack8
Android Hacks - Hack8
Masanori Ohkawara
 
Android Hacks - Hack32
Android Hacks - Hack32
Masanori Ohkawara
 
Android Hacks - Hack40
Android Hacks - Hack40
Masanori Ohkawara
 
Windows phone 8のデバイスを使おう~カメラ&フォト編~(公開用)
Windows phone 8のデバイスを使おう~カメラ&フォト編~(公開用)
Nobuaki Aoki
 
HTML5 APIを使ったデモとソースの解説
HTML5 APIを使ったデモとソースの解説
Hideki Akiba
 
AI画像認識アプリ.pptx
AI画像認識アプリ.pptx
ssuser3afcb9
 
CameraXへの安全なライブラリ移行方法.pptx
CameraXへの安全なライブラリ移行方法.pptx
松川 知憲
 
Viewのキャプチャを撮ってみる
Viewのキャプチャを撮ってみる
Yoshihiro Wada
 
Opera Mobile for AndroidのカメラサポートをつかってWebコンテンツにカメラ機能をつけてみたお話
Opera Mobile for AndroidのカメラサポートをつかってWebコンテンツにカメラ機能をつけてみたお話
Akira Ouchi
 
CardboardのUXをカメラで向上する (droidkaigi 2015/04)
CardboardのUXをカメラで向上する (droidkaigi 2015/04)
Kenichi Takahashi
 
Android Hacks - 合宿インテント
Android Hacks - 合宿インテント
Masanori Ohkawara
 
Android Hacks - 合宿 Service
Android Hacks - 合宿 Service
Masanori Ohkawara
 
Android Hacks - 合宿 Activity
Android Hacks - 合宿 Activity
Masanori Ohkawara
 
Android Hacks - Hack57
Android Hacks - Hack57
Masanori Ohkawara
 
Android Hacks - Hack47
Android Hacks - Hack47
Masanori Ohkawara
 
Android Hacks - Hack27 ~ Hack29
Android Hacks - Hack27 ~ Hack29
Masanori Ohkawara
 
Android Hacks - Hack26
Android Hacks - Hack26
Masanori Ohkawara
 
Android Hacks - Hack21
Android Hacks - Hack21
Masanori Ohkawara
 
Android Hacks - Hack12
Android Hacks - Hack12
Masanori Ohkawara
 

More Related Content

Viewers also liked (6)

Android Hacks - Hack11
Android Hacks - Hack11
Masanori Ohkawara
 
Android Hacks - Hack18 ~ Hack20
Android Hacks - Hack18 ~ Hack20
Masanori Ohkawara
 
Android Hacks - Hack59
Android Hacks - Hack59
Masanori Ohkawara
 
Android Hacks - Hack8
Android Hacks - Hack8
Masanori Ohkawara
 
Android Hacks - Hack32
Android Hacks - Hack32
Masanori Ohkawara
 
Android Hacks - Hack40
Android Hacks - Hack40
Masanori Ohkawara
 

Similar to Android Hacks - Hack30 (7)

Windows phone 8のデバイスを使おう~カメラ&フォト編~(公開用)
Windows phone 8のデバイスを使おう~カメラ&フォト編~(公開用)
Nobuaki Aoki
 
HTML5 APIを使ったデモとソースの解説
HTML5 APIを使ったデモとソースの解説
Hideki Akiba
 
AI画像認識アプリ.pptx
AI画像認識アプリ.pptx
ssuser3afcb9
 
CameraXへの安全なライブラリ移行方法.pptx
CameraXへの安全なライブラリ移行方法.pptx
松川 知憲
 
Viewのキャプチャを撮ってみる
Viewのキャプチャを撮ってみる
Yoshihiro Wada
 
Opera Mobile for AndroidのカメラサポートをつかってWebコンテンツにカメラ機能をつけてみたお話
Opera Mobile for AndroidのカメラサポートをつかってWebコンテンツにカメラ機能をつけてみたお話
Akira Ouchi
 
CardboardのUXをカメラで向上する (droidkaigi 2015/04)
CardboardのUXをカメラで向上する (droidkaigi 2015/04)
Kenichi Takahashi
 
Windows phone 8のデバイスを使おう~カメラ&フォト編~(公開用)
Windows phone 8のデバイスを使おう~カメラ&フォト編~(公開用)
Nobuaki Aoki
 
HTML5 APIを使ったデモとソースの解説
HTML5 APIを使ったデモとソースの解説
Hideki Akiba
 
AI画像認識アプリ.pptx
AI画像認識アプリ.pptx
ssuser3afcb9
 
CameraXへの安全なライブラリ移行方法.pptx
CameraXへの安全なライブラリ移行方法.pptx
松川 知憲
 
Viewのキャプチャを撮ってみる
Viewのキャプチャを撮ってみる
Yoshihiro Wada
 
Opera Mobile for AndroidのカメラサポートをつかってWebコンテンツにカメラ機能をつけてみたお話
Opera Mobile for AndroidのカメラサポートをつかってWebコンテンツにカメラ機能をつけてみたお話
Akira Ouchi
 
CardboardのUXをカメラで向上する (droidkaigi 2015/04)
CardboardのUXをカメラで向上する (droidkaigi 2015/04)
Kenichi Takahashi
 

More from Masanori Ohkawara (9)

Android Hacks - 合宿インテント
Android Hacks - 合宿インテント
Masanori Ohkawara
 
Android Hacks - 合宿 Service
Android Hacks - 合宿 Service
Masanori Ohkawara
 
Android Hacks - 合宿 Activity
Android Hacks - 合宿 Activity
Masanori Ohkawara
 
Android Hacks - Hack57
Android Hacks - Hack57
Masanori Ohkawara
 
Android Hacks - Hack47
Android Hacks - Hack47
Masanori Ohkawara
 
Android Hacks - Hack27 ~ Hack29
Android Hacks - Hack27 ~ Hack29
Masanori Ohkawara
 
Android Hacks - Hack26
Android Hacks - Hack26
Masanori Ohkawara
 
Android Hacks - Hack21
Android Hacks - Hack21
Masanori Ohkawara
 
Android Hacks - Hack12
Android Hacks - Hack12
Masanori Ohkawara
 

Recently uploaded (7)

Protect Your IoT Data with UbiBot's Private Platform.pptx
Protect Your IoT Data with UbiBot's Private Platform.pptx
ユビボット 株式会社
 
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
iPride Co., Ltd.
 
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
iPride Co., Ltd.
 
AI技術共有会2025-06-05_DeepResearchの理解と実践.pdf
AI技術共有会2025-06-05_DeepResearchの理解と実践.pdf
Takuma Oda
 
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
NTT DATA Technology & Innovation
 
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
 
色について.pptx .
色について.pptx .
iPride Co., Ltd.
 
Protect Your IoT Data with UbiBot's Private Platform.pptx
Protect Your IoT Data with UbiBot's Private Platform.pptx
ユビボット 株式会社
 
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
iPride Co., Ltd.
 
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
iPride Co., Ltd.
 
AI技術共有会2025-06-05_DeepResearchの理解と実践.pdf
AI技術共有会2025-06-05_DeepResearchの理解と実践.pdf
Takuma Oda
 
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
NTT DATA Technology & Innovation
 
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
 

Android Hacks - Hack30

  • 1. ANDROID HACKS #30 カメラを使う 担当: Tatsuki Higashi Twitter : @htk16 09/19/11
  • 2. この資料について この資料は下記の本をベースに勉強会で作成した資料です。 『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー・ジャパン刊) この本の紹介ページが下記にあります。 http://www.oreilly.co.jp/books/9784873114569/ 09/19/11
  • 3. アジェンダ カメラからの情報を取得する カメラの画像を画面に表示する Hack をさらに Hack する カメラの画像をファイルに保存する (写真を撮る) プレビュー画像を取得する 09/19/11
  • 4. 0. 始める前に 自分の環境だけかもしれないが, Hack30 のサンプルはそのまま ビルドできませんでした. -> src ディレクトリ以下の .svn ディレクトリを削除して対応 09/19/11
  • 6. 1. カメラからの情報を取得 カメラを使えるようにする AndroidManifest.xml の manifest タグに以下を追加 <uses-permission android:name= &quot;android.permission.CAMERA&quot; /> 必要ならば,カメラの機能を有効にする <uses-feature android:name=&quot;android.hardware.camera&quot; /> <uses-feature android:name=&quot;android.hardware.camera.autofocus&quot; /> 前者はカメラを使うならば必要? 09/19/11
  • 7. 1. カメラからの情報を取得 カメラ利用の流れ Camera.open: カメラのインスタンス取得 Camera.getParameter: カメラの各種パラメータ取得 Camera.Parameter 型でパラメータを返す Camera.setParameter: 必要ならば,パラメータ変更 Camera.setCameraOrientation: 必要ならば,角度の補正 Camera.setPreviewDisplay : 初期化された SurfaceHolder を渡す これをやらないと preview ができない Camera.startPreview : カメラの映像で Surface を更新し始める Camera.stopPreview: preview を停止する Camera.release : カメラを返却する 09/19/11
  • 8. 1. カメラからの情報を取得 解像度を変更する Camera.Parameter.setPreviewSize(int width, int height) Camera.getParameter でカメラのパラメータを取得 Camera.Parameter.setPreviewSize でパラメータ変更 Camera.setParameter で変更したパラメータを設定 Activity のサイズ変更に追従して変更する場合は 以下の callback メソッド内で行うのが良い Activity.surfaceChanged(SurfaceHolder h, int format, int width, int height) 09/19/11
  • 9. 1. カメラからの情報を取得 SurfaceHolder 4 種類の surface が利用可 SURFACE_TYPE_GPU GPU 描画に対応した surface 非推奨 SURFACE_TYPE_HARDWARE DMA 転送に対応したハードウェア surface 非推奨 SURFACE_TYPE_NORMAL 通常(?)の surface SURFACE_TYPE_PUSH_BUFFERS buffer を持たない surface カメラで使うのはこの種類 SurfaceHolder.addCallback callback interface になる activity などを追加する 09/19/11
  • 10. 1. カメラからの情報を取得 CameraPreview (例 30-1 29 〜 79) SurfaceView の派生クラス コンストラクタで SurfaceHolder を作成し, CameraPreview をその callback interface として登録 CameraPreview.surfaceCreated カメラに preview surface を与える CameraPreview.surfaceChanged カメラの解像度を変更 CameraPreview.surfaceDestroyed 後始末 MainActivity ( 例 30-1 13 〜 74 ) onCreate で CameraPreview のインスタンスを ContentView として指定 09/19/11
  • 11. 2. Hack をさらに Hack する - カメラ画像をファイルに保存 09/19/11
  • 12. 2. カメラ画像を保存 カメラ利用の流れ カメラのインスタンス取得 カメラの各種パラメータ取得 必要ならば,パラメータ変更 必要ならば,角度の補正 初期化された SurfaceHolder を渡す カメラの映像で Surface を更新し始める 画像をキャプチャする Camera.takePicture : 静止画像を取得 Camera.startPreview: カメラの更新を再開 preview を停止する カメラを返却する 09/19/11
  • 13. 2. カメラ画像を保存 Camera.takePicture(Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback postview, Camera.PictureCallback jpeg) shutter: シャッターが押されたときの callback interface Camera.ShutterCallback.onShutter raw: 処理前画像を取得したときの callback interface Camera.ShutterCallback.onPictureTaken postview: postview image を取得したときの interface ? 基本的には null を与える jpeg: jpeg 画像を取得した際の callback interface Camera.ShutterCallback.onPictureTaken 09/19/11
  • 14. 2. カメラ画像を保存 Camera.ShutterCallback.onPictureTaken(byte[] data, Camera cam) data: raw の callback interface なら未処理画像,     jpeg なら jpeg 圧縮された画像のバイナリデータ 09/19/11
  • 15. 2. カメラ画像を保存 jpeg 画像のキャプチャ ( 図 30-2) MainWithShutterActivity.onTouchEvent ( 図 30-2 77 〜 90) 画面を押し込んだなら画面をキャプチャ Camera.takePicture でキャプチャ shutter, raw には何もしない interface を与える jpeg には画像をファイルに書き出す interface を与える Camera.startPreview で preview を再開 画面の押し込み以外のイベントならデフォルトの処理を行う 09/19/11
  • 17. 3. プレビュー画像を取得する Camera.setPreviewCallback(Camera.PrevieCallback cb): カメラがプレビュー画像を取得した時に呼ばれる callback interface を指定する Camera.PreviewCallback.onPreviewFrame(byte[] data, Camera cam) プレビューが更新されたときに呼ばれる data: プレビュー画像 (YUV420SP 形式) Bitmap 画像の保存 ( 図 30-3) プレビューが更新されるたびにその画像をメモリ上に保持 画面がタッチされたら保持しているデータから bitmap 画像を作成 この処理は時間がかかるので,別スレッドで実行 09/19/11
  • 18. 参考 URL Android Developers | Camera http://developer.android.com/reference/android/hardware/Camera.html 09/19/11