ふー食った食った。
みなさんこんばんは。やっぱ浜松餃子は最高だわ。
えーと。
今月のABC 2016までには公開しようと、頑張ってアプリを作ってたワケですが。
先日、なんとか公開することができました。ぱちぱちぱち。
これで、浜松支部のブースに、チラシを置いてもらうことができる・・・ッ!
(急いでた理由これだけ)
Android SDKのCamera2に散々てこずらされたり、
パーミッション関係の処理をほとんどしてないことに、公開されてから気づいたり
(大慌てで修正)、
バタバタし通しでしたが、まあなんとか形になって良かった。
・・・形だけだけどな・・・(ぼそっ)
で。
今日はお天気もいいことですし、新アプリのフィールドテスト(?)を兼ねて、「浜松餃子まつり2016」に行ってみました。
位置情報を扱うアプリでありながら、開発とテストをほとんどおウチでしかやってませんでしたしね。さみしいよねそれじゃ。
というワケで、おにぎり持参で会場へ。
おおー。結構、人でてますなー。
早速「ロケッパ!」でパチリ。・・・よしよし、写ってる写ってる。ああ良かった。
(もう公開しちゃってるし写ってなかったら困るんですが)
餃子のお店もいっぱい。
だいたい1パック3個〜4個くらいで、200円〜400円くらい。
もうこれはいろいろと試すしかないでしょ!
まあ『豚猿』をおさえておくのは基本ですよね。れんこんシャリシャリで美味しかった。
でも、個人的なオススメは、こちらかな。
『喜久屋』。キャベツがいっぱい入ってて、ほんのり甘かったー。おいしー。
あとはこちら。
『しゃもじ』。パリパリ。上品で複雑な味。おいしい。
おっとっと、いけねえいけねえ。
フィールドテストだった、へっへっへ。餃子食ってばっかりじゃだめだ。
腹も膨れたので、ちょっと散歩。場所を変えてみました。
よしよし、ちゃんと住所も地図も更新されてる。ほっ。
(だから更新されてないとやばいんだってば)
気が楽になったのでもう少しお散歩。
途中でインド人っぽい方に道を聞かれた。
地下道の入り口で迷ってて、「浜松駅は、ココ、降りればイイノ・・・?」
笑顔で「イエス!ゴー!ダウン!ストレイトォー!」って答えときました。
ビオ・あつみにまで足を延ばしました。
ここ、いいものが結構置いてあって、棚を眺めてるだけで幸せになる・・・。
割と楽しいフィールドテストだったので、また行こうと思います。うふん。
★★★
PR:
OpenStreetMapを使用したAndroidカメラアプリ、「ロケッパ!」販売中です!
撮った写真に、OpenStreetMapの地図を合成するよ!それだけ!
よろしければご購入ください!助けると思って!お願い!!
2016年11月13日日曜日
2016年11月5日土曜日
またしてもたった一行が:Ancroid SDK Camera2で位置情報を写真に保存する #EXIF #Android
みなさまこんばんは。
今日はCamera2で位置情報保存するにはCaptureRequest.JPEG_GPS_LOCATIONしないとだめだよ、ってお話です。あるいは、リファレンスはちゃんと読め、というお話・・・。
週末ですねー。
週末といってもさっぱり休めてませんが、皆様いかがお過ごしでしょうか。
まあ休めていない理由の一つに、今月のABC 2016までに公開しようと目論んでるアプリの進捗が思わしくないことがあるんですけど。
あと二週間だよ。基本的な機能もまだ実装できてないよママン。
で、今日も空き時間を見つけてカリカリとコードを書いてました。
・・・やっぱCamera2難しいわ。
いや、「難しそう」と最初に先入観持ってしまったから、余計そう思うのかもしれませんが。
だってサンプル少ないんだもん。
カメラで撮影して、画像にOpenStreetMapの地図を合成して、ApacheのCommons Imagingを使ってEXIF情報をのっけたまではできたんですが。
肝心な位置情報がどうしても保存できない・・・。
GPSからはきちんと位置情報取れてるのになー。
・・・位置情報だけはExifInterface使わないとダメなのかな?
と思って、嫌々(理由はこちら)試してみるも、玉砕。
まあそんなわきゃねえか。
ここまでで既に一時間。コードを書いちゃ消し・・・はせずに「もったいないから」とコメントアウト。過ぎ去っていく時間に比例して増えていくコメント行。ああ。
でも、ふと、ぶれいくするーは訪れるもので。
「そもそも、位置情報を保存するようにカメラに言わなきゃだめなんじゃね?」
・・・あったあった。
「CaptureRequest」に、「JPEG_GPS_LOCATION」ってのがしっかりと・・・。
こんな感じで。前後ちょっとはしょりますが。
Location crrLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
...
final CaptureRequest.Builder captureBuilder =
mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
...
captureBuilder.set(CaptureRequest.JPEG_GPS_LOCATION, crrLocation);
今日はCamera2で位置情報保存するにはCaptureRequest.JPEG_GPS_LOCATIONしないとだめだよ、ってお話です。あるいは、リファレンスはちゃんと読め、というお話・・・。
週末ですねー。
週末といってもさっぱり休めてませんが、皆様いかがお過ごしでしょうか。
まあ休めていない理由の一つに、今月のABC 2016までに公開しようと目論んでるアプリの進捗が思わしくないことがあるんですけど。
あと二週間だよ。基本的な機能もまだ実装できてないよママン。
で、今日も空き時間を見つけてカリカリとコードを書いてました。
・・・やっぱCamera2難しいわ。
いや、「難しそう」と最初に先入観持ってしまったから、余計そう思うのかもしれませんが。
だってサンプル少ないんだもん。
カメラで撮影して、画像にOpenStreetMapの地図を合成して、ApacheのCommons Imagingを使ってEXIF情報をのっけたまではできたんですが。
肝心な位置情報がどうしても保存できない・・・。
GPSからはきちんと位置情報取れてるのになー。
・・・位置情報だけはExifInterface使わないとダメなのかな?
と思って、嫌々(理由はこちら)試してみるも、玉砕。
まあそんなわきゃねえか。
ここまでで既に一時間。コードを書いちゃ消し・・・はせずに「もったいないから」とコメントアウト。過ぎ去っていく時間に比例して増えていくコメント行。ああ。
でも、ふと、ぶれいくするーは訪れるもので。
「そもそも、位置情報を保存するようにカメラに言わなきゃだめなんじゃね?」
・・・あったあった。
「CaptureRequest」に、「JPEG_GPS_LOCATION」ってのがしっかりと・・・。
こんな感じで。前後ちょっとはしょりますが。
...
final CaptureRequest.Builder captureBuilder =
mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
...
captureBuilder.set(CaptureRequest.JPEG_GPS_LOCATION, crrLocation);
これだけ。この最後の一行だけ。
この一行追加しただけで、あっさりと位置情報保存してくれた。
一時間半経過して、ようやくガッツポーズ。周囲に人いなくてよかった。
・・・何もカメラに要求しないでも、GPSさえ有効にしておけば、カメラちゃんの方で勝手に位置情報をメタデータに保存してくれる、って私が思い込んでたんですよねー。
Camera2ではいちいちきちんと要求しないといけない、ということなのかしら。
まあ、Commons Imagingの使い方を疑ったりExifInterfaceに擦り寄ったり、そういう回り道したからこそ、CaptureRequestしないとダメなんでは?と着想したわけで、何つーの?急がば回れ、的な・・・
・・・いや、最初からドキュメント読んどきゃええねん・・・ orz
あともうちょっと。頑張ろう。
2016年10月28日金曜日
不変じゃあかんやん:Android SDK Camera2で撮影した画像にテキストを合成する #android #java
んはーあ。
眠い。
みーなさーん、元気ですーかー。
・・・今日は備忘録です。100%備忘録です。Androidです。アプリです。
(ブログの構成も何もあったもんじゃない書き方・・・)
いやね、せっかく来月末にABC 2016 Autumnに行くんなら、自作のアプリの一つや二つ、引っさげてったらカッコイイかなー、なんて思い立ちまして。
半ば放置してたカメラアプリをちょこちょこいじってたわけですが。
相変わらず、Camera2、難しいわ・・・。
何日も試行錯誤して、先日、やっと写真が保存できるようになりましたさ。
で、今日は、撮影した画像に文字列を埋め込んでみようかと。
撮影した画像に文字列を合成すること自体は、以前開発したアプリで経験済み。
でも、あの時は「android.hardware.Camera」使ってた。
さて、「android.hardware.camera2」使ったらどうすればいいんだべか。
ヾ(。>﹏<。)ノ
どっかでカメラから取得した画像をBitmapにして、
眠い。
みーなさーん、元気ですーかー。
・・・今日は備忘録です。100%備忘録です。Androidです。アプリです。
(ブログの構成も何もあったもんじゃない書き方・・・)
いやね、せっかく来月末にABC 2016 Autumnに行くんなら、自作のアプリの一つや二つ、引っさげてったらカッコイイかなー、なんて思い立ちまして。
半ば放置してたカメラアプリをちょこちょこいじってたわけですが。
相変わらず、Camera2、難しいわ・・・。
何日も試行錯誤して、先日、やっと写真が保存できるようになりましたさ。
で、今日は、撮影した画像に文字列を埋め込んでみようかと。
撮影した画像に文字列を合成すること自体は、以前開発したアプリで経験済み。
でも、あの時は「android.hardware.Camera」使ってた。
さて、「android.hardware.camera2」使ったらどうすればいいんだべか。
ヾ(。>﹏<。)ノ
どっかでカメラから取得した画像をBitmapにして、
それをCanvasに描画して、
drawText使ってやればいいのは、同じだと思うけど・・・。
で、四苦八苦してなんとかできたのがこちら。
ImageReader.OnImageAvailableListener readerListener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Image image = null;
try {
image = reader.acquireLatestImage();
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
byte[] bytes = new byte[buffer.capacity()];
buffer.get(bytes);
BitmapFactory.Options bitmapFactoryOptions = new BitmapFactory.Options();
bitmapFactoryOptions.inMutable = true;
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, bitmapFactoryOptions);
Paint paint_text = new Paint();
paint.setColor(Color.argb(100, 125,0, 34));
paint_text.setColor(Color.argb(255, 0, 0, 0));
paint_text.setTextSize(50);
Canvas bitmapCanvas = new Canvas(bmp);
bitmapCanvas.drawText("Text string", 500, 500, paint_text);
bitmapCanvas.save();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
byte[] bytes_toSave = byteArrayOutputStream.toByteArray();
saveImage(bytes_toSave);
} catch (FileNotFoundException e){
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
} finally {
if(image != null){
image.close();
}
}
}
private void saveImage(byte[] bytes) throws IOException {
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream(mFile);
outputStream.write(bytes);
} finally {
if(outputStream != null){
outputStream.close();
}
}
}
};
bitmapを作る時に、不変にしてなかったところで、しばらく蹴つまずいておりました。
このへんですね。
上の一行目で、BitmapFactoryに渡すオプションの箱を用意。
二行目、「.inMutable」で、ビットマップを変更可能にするオプションを定義。
で、BitmapFactoryでBitmap作るときに、定義したオプション、「bitmapFactoryOptions」を渡してあげましたさ。
ほいっとな。
んー。適当だけど、とーりあえず、写真に文字列のっかりました。
こんだけのことだけど、久しぶりにソースいじったら苦労したー。
しかも、手持ちのUSBケーブルがどれもこれも断線してて、Macと実機を接続できるケーブルを探すのがこれまた一苦労。
最近、いらん苦労ばかりしてる気がする・・・
このへんですね。
BitmapFactory.Options bitmapFactoryOptions = new BitmapFactory.Options();
bitmapFactoryOptions.inMutable = true;
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, bitmapFactoryOptions);
上の一行目で、BitmapFactoryに渡すオプションの箱を用意。
二行目、「.inMutable」で、ビットマップを変更可能にするオプションを定義。
で、BitmapFactoryでBitmap作るときに、定義したオプション、「bitmapFactoryOptions」を渡してあげましたさ。
ほいっとな。
んー。適当だけど、とーりあえず、写真に文字列のっかりました。
こんだけのことだけど、久しぶりにソースいじったら苦労したー。
しかも、手持ちのUSBケーブルがどれもこれも断線してて、Macと実機を接続できるケーブルを探すのがこれまた一苦労。
最近、いらん苦労ばかりしてる気がする・・・
位置とか書式とかは、また明日にしよう。
もう寝るー。
登録:
投稿 (Atom)




