質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

2回答

2533閲覧

【緊急】camerapreviewクラスを使った撮影方法

jigokunoiruka

総合スコア8

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2016/07/14 10:03

編集2022/01/12 10:55

今、NyARToolkitのSimpleLiteを拡張して、カメラ撮影が出来るようにしようとしています。
しかし、以下のソースコードをで実行してみても、

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.hardware.Camera$Parameters android.hardware.Camera.getParameters()' on a null object reference

at jp.nyatla.nyartoolkit.and.SimpleLiteActivity.onStart(SimpleLiteActivity.java:86)

とログに出力されて、起動しません。なにが原因なのか教えていただいたいです。

java

1public class SimpleLiteActivity extends AndSketch implements AndGLView.IGLFunctionEvent/*, Camera.PictureCallback*/ { 2 private Camera mCam = null; 3 private CameraPreview _camera_preview=null; 4 AndGLView _glv; 5 private boolean mIsTake = false; 6 Camera.Size _cap_size; 7 8 /** 9 * ATTENTION: This was auto-generated to implement the App Indexing API. 10 * See https://g.co/AppIndexing/AndroidStudio for more information. 11 */ 12 private GoogleApiClient client; 13 14 /** 15 * onStartでは、Viewのセットアップをしてください。 16 */ 17 @Override 18 public void onStart() { 19 super.onStart(); 20 // ATTENTION: This was auto-generated to implement the App Indexing API. 21 // See https://g.co/AppIndexing/AndroidStudio for more information. 22 client.connect(); 23 24 25 try { 26 mCam = Camera.open(); 27 } catch (Exception e) { 28 // エラー 29 this.finish(); 30 } 31 32 33 FrameLayout fr = ((FrameLayout) this.findViewById(R.id.sketchLayout)); 34 //カメラの取得 35 36 37 this._camera_preview = new CameraPreview(this); //エラーが出ている行はここです! 38 this._cap_size = this._camera_preview.getRecommendPreviewSize(320, 240); 39 40 41 //画面サイズの計算 42 int h = this.getWindowManager().getDefaultDisplay().getHeight(); 43 int w = this.getWindowManager().getDefaultDisplay().getWidth(); 44 int screen_w, screen_h; 45 screen_w = w; 46 screen_h = h; 47 //camera 48 49 fr.addView(this._camera_preview, 0, new LayoutParams(screen_w, screen_h)); 50 //GLview 51 this._glv = new AndGLView(this); 52 fr.addView(this._glv, 0, new LayoutParams(screen_w, screen_h)); 53 54 _camera_preview.setOnTouchListener(new View.OnTouchListener() { 55 public boolean onTouch(View v, MotionEvent event) { 56 if (event.getAction() == MotionEvent.ACTION_DOWN) { 57 if (!mIsTake) { 58 // 撮影中の2度押し禁止用フラグ 59 mIsTake = true; 60 // 画像取得 61 mCam.takePicture(null, null, mPicJpgListener); 62 } 63 } 64 return true; 65 } 66 }); 67 68 // ATTENTION: This was auto-generated to implement the App Indexing API. 69 // See https://g.co/AppIndexing/AndroidStudio for more information. 70 Action viewAction = Action.newAction( 71 Action.TYPE_VIEW, // TODO: choose an action type. 72 "SimpleLite Page", // TODO: Define a title for the content shown. 73 // TODO: If you have web page content that matches this app activity's content, 74 // make sure this auto-generated web page URL is correct. 75 // Otherwise, set the URL to null. 76 Uri.parse("http://host/path"), 77 // TODO: Make sure this auto-generated app URL is correct. 78 Uri.parse("android-app://jp.nyatla.nyartoolkit.and/http/host/path") 79 ); 80 AppIndex.AppIndexApi.start(client, viewAction); 81 82 83 } 84 85 86 NyARAndSensor _ss; 87 NyARAndMarkerSystem _ms; 88 private int _mid; 89 AndGLTextLabel text; 90 AndGLBox box; 91 AndGLFpsLabel fps; 92 93 94 public void setupGL(GL10 gl) { 95 try { 96 AssetManager assetMng = getResources().getAssets(); 97 //create sensor controller. 98 this._ss = new NyARAndSensor(this._camera_preview, this._cap_size.width, this._cap_size.height, 30); 99 //create marker system 100 this._ms = new NyARAndMarkerSystem(new NyARMarkerSystemConfig(this._cap_size.width, this._cap_size.height)); 101 this._mid = this._ms.addARMarker(assetMng.open("AR/data/neomoto.pat"), 16, 25, 80); 102 this._ss.start(); 103 //setup openGL Camera Frustum 104 gl.glMatrixMode(GL10.GL_PROJECTION); 105 gl.glLoadMatrixf(this._ms.getGlProjectionMatrix(), 0); 106 this.text = new AndGLTextLabel(this._glv); 107 this.box = new AndGLBox(this._glv, 40); 108 this._debug = new AndGLDebugDump(this._glv); 109 this.fps = new AndGLFpsLabel(this._glv, "MarkerPlaneActivity"); 110 this.fps.prefix = this._cap_size.width + "x" + this._cap_size.height + ":"; 111 112 } catch (Exception e) { 113 // TODO Auto-generated catch block 114 e.printStackTrace(); 115 this.finish(); 116 } 117 } 118 119 AndGLDebugDump _debug = null; 120 121 /** 122 * 継承したクラスで表示したいものを実装してください 123 * 124 * @param gl 125 */ 126 public void drawGL(GL10 gl) { 127 try { 128 //背景塗り潰し色の指定 129 gl.glClearColor(0, 0, 0, 0); 130 //背景塗り潰し 131 gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 132 if (ex != null) { 133 _debug.draw(ex); 134 return; 135 } 136 fps.draw(0, 0); 137 synchronized (this._ss) { 138 this._ms.update(this._ss); 139 if (this._ms.isExistMarker(this._mid)) { 140 this.text.draw("found" + this._ms.getConfidence(this._mid), 0, 16); 141 gl.glMatrixMode(GL10.GL_MODELVIEW); 142 gl.glLoadMatrixf(this._ms.getGlMarkerMatrix(this._mid), 0); 143 this.box.draw(0, 0, 20); 144 } 145 } 146 } catch (Exception e) { 147 ex = e; 148 } 149 } 150 151 Exception ex = null; 152 153 @Override 154 protected void onCreate(Bundle savedInstanceState) { 155 super.onCreate(savedInstanceState); 156 setContentView(R.layout.main); 157 158 // ATTENTION: This was auto-generated to implement the App Indexing API. 159 // See https://g.co/AppIndexing/AndroidStudio for more information. 160 client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); 161 } 162 163 @Override 164 public void onStop() { 165 super.onStop(); 166 167 // ATTENTION: This was auto-generated to implement the App Indexing API. 168 // See https://g.co/AppIndexing/AndroidStudio for more information. 169 Action viewAction = Action.newAction( 170 Action.TYPE_VIEW, // TODO: choose an action type. 171 "SimpleLite Page", // TODO: Define a title for the content shown. 172 // TODO: If you have web page content that matches this app activity's content, 173 // make sure this auto-generated web page URL is correct. 174 // Otherwise, set the URL to null. 175 Uri.parse("http://host/path"), 176 // TODO: Make sure this auto-generated app URL is correct. 177 Uri.parse("android-app://jp.nyatla.nyartoolkit.and/http/host/path") 178 ); 179 AppIndex.AppIndexApi.end(client, viewAction); 180 client.disconnect(); 181 } 182 183 @Override 184 protected void onPause() { 185 super.onPause(); 186 // カメラ破棄インスタンスを解放 187 if (mCam != null) { 188 mCam.release(); 189 mCam = null; 190 } 191 } 192 193 private Camera.PictureCallback mPicJpgListener = new Camera.PictureCallback() { 194 public void onPictureTaken(byte[] data, Camera camera) { 195 if (data == null) { 196 return; 197 } 198 199 String saveDir = Environment.getExternalStorageDirectory().getPath() + "/test"; 200 201 // SD カードフォルダを取得 202 File file = new File(saveDir); 203 204 // フォルダ作成 205 if (!file.exists()) { 206 if (!file.mkdir()) { 207 Log.e("Debug", "Make Dir Error"); 208 } 209 } 210 211 // 画像保存パス 212 Calendar cal = Calendar.getInstance(); 213 SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd_HHmmss"); 214 String imgPath = saveDir + "/" + sf.format(cal.getTime()) + ".jpg"; 215 216 // ファイル保存 217 FileOutputStream fos; 218 try { 219 fos = new FileOutputStream(imgPath, true); 220 fos.write(data); 221 fos.close(); 222 223 // アンドロイドのデータベースへ登録 224 // (登録しないとギャラリーなどにすぐに反映されないため) 225 registAndroidDB(imgPath); 226 227 } catch (Exception e) { 228 Log.e("Debug", e.getMessage()); 229 } 230 231 fos = null; 232 233 // takePicture するとプレビューが停止するので、再度プレビュースタート 234 mCam.startPreview(); 235 236 mIsTake = false; 237 } 238 }; 239 240 /** 241 * アンドロイドのデータベースへ画像のパスを登録 242 * @param path 登録するパス 243 */ 244 private void registAndroidDB(String path) { 245 // アンドロイドのデータベースへ登録 246 // (登録しないとギャラリーなどにすぐに反映されないため) 247 ContentValues values = new ContentValues(); 248 ContentResolver contentResolver = SimpleLiteActivity.this.getContentResolver(); 249 values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); 250 values.put("_data", path); 251 contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 252 } 253 254 private void toast(String s) { 255 Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show(); 256 } 257 258}

追記
申し訳ありません。エラーの出ている個所にコメントを挿入しました。何度見てもこのエラーの理由がわからないです。無知でもうしわけないです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/07/15 02:31

エラー出ている行本当にそこで合ってます?new している場所で普通NullPointerExceptionで落ちないとおもいます。CameraPreviewってクラスのコンストラクターの内部の処理で落ちているなら、可能であればそのソースを見せて欲しいです。
guest

回答2

0

AndroidManifest.xmlに以下のパーミッションかいてますか?
<uses-permission android:name="android.permission.CAMERA"/>

投稿2016/07/14 10:45

Yossi_1982

総合スコア95

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jigokunoiruka

2016/07/14 10:47

はい、AndroidManifest.xmlにはそのパーミッションは追加しています、、、
guest

0

まずは、しっかりとエラーを読みましょう。
SimpleLiteActivityの86行目でNullPointerExceptionが発生しています。
どの行ですか?

投稿2016/07/14 10:13

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問