Android SDK Bitmapをあらかじめ縮小してから読み込む(OutOfMemory対策)

Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

今の端末だと10Mピクセルを越えるカメラを搭載した端末が普通になってきており、そのファイルサイズも数MBに及びます。
AndroidでBitmapFactoryを利用してフォトライブラリーから画像を読み込んだりすると思いますが、そのままその画像を読み込んでしまうと、しばしばOutOfMemoryとなりアプリが強制終了してしまいます。
そこで、実際に画像を読み込む前にある程度縮小してから読み込むことで、メモリが足りなくなることを防ごうというのが今回のネタです。

BitmapFactory.OptionsのinSampleSizeを指定して画像を縮小した状態で読み込む

処理の流れ的にはまず画像のサイズを取得して、サイズが大きかったら縮小指定してから読み込もう、という感じです。

InputStream inputStream = getContentResolver().openInputStream(data.getData());

// 画像サイズ情報を取得する
BitmapFactory.Options imageOptions = new BitmapFactory.Options();
imageOptions.inJustDecodeBounds = true;
BitmapFactory.decodeStream(inputStream, null, imageOptions);
Log.v("image", "Original Image Size: " + imageOptions.outWidth + " x " + imageOptions.outHeight);

inputStream.close();

// もし、画像が大きかったら縮小して読み込む
//  今回はimageSizeMaxの大きさに合わせる
Bitmap bitmap;
int imageSizeMax = 500;
inputStream = getContentResolver().openInputStream(data.getData());
float imageScaleWidth = (float)imageOptions.outWidth / imageSizeMax;
float imageScaleHeight = (float)imageOptions.outHeight / imageSizeMax;

// もしも、縮小できるサイズならば、縮小して読み込む
if (imageScaleWidth > 2 && imageScaleHeight > 2) {	
	BitmapFactory.Options imageOptions2 = new BitmapFactory.Options();

	// 縦横、小さい方に縮小するスケールを合わせる
	int imageScale = (int)Math.floor((imageScaleWidth > imageScaleHeight ? imageScaleHeight : imageScaleWidth));	

	// inSampleSizeには2のべき上が入るべきなので、imageScaleに最も近く、かつそれ以下の2のべき上の数を探す
	for (int i = 2; i < imageScale; i *= 2) {
		imageOptions2.inSampleSize = i;
	}

	bitmap = BitmapFactory.decodeStream(iStream, null, imageOptions2);
	Log.v("image", "Sample Size: 1/" + imageOptions2.inSampleSize);
} else {
	bitmap = BitmapFactory.decodeStream(inputStream);
}

inputStream.close();

BitmapFactory.OptionsのinSampleSizeに2のべき上を入れ、それを指定して画像を読み込むことで、2のべき上で縮小された画像を読み込むことができます。
たとえば、inSampleSize=2であれば、 1/2に縮小された画像が、inSampleSize=4であれば、1/4に縮小された画像が読み込まれます。
inSampleSizeには2,4,8,16と2のべき上を入れます。

読み込む画像の階調を指定して読み込む

読み込む際の画像サイズの縮小は解像度だけでなく、階調を変えることでサイズを落とすこともできます。

BitmapFactory.Options imageOptions = new BitmapFactory.Options();
imageOptions.options.inPreferredConfig = Bitmap.Config.ARGB_8888;

設定できる階調は以下です。

  • ARGB_8888:alpha/R/G/B 各8bit ー 8*4 = 32bit = 4byte / pixel
  • ARGB_4444:alpha/R/G/B 各4bit ー 4*4 = 16bit = 2byte / pixel
  • RGB_565:R(5bit)/G(6)/B(5) ー 5+6+5 = 16bit = 2byte / pixel
  • ALPHA_8:αのみを8bit ー 8bit = 1byte / pixel

体感的にはアルファー値の無い写真などは、RGB_565とかはそこまで劣化が気にならない程度でサイズが半分になるのでおすすめです。

まとめ

画像取得系はメモリを消費して大きい画像を取得するとすぐにOutOfMemoryで落ちるので、読み込む前にサイズを小さくしよう!

An error occurred uploading to the iTunes Store エラーが出てアプリがアップロードできない → 解決 【 #iPhoneAppMemo 】

Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

スクリーンショット 2012-11-11 23.26.25.png

アプリをアップデートしようと思って、iTunes Connectへアップロードしようと思ったら、上記のようなサッパリとしたエラー文が出て一向にアップロードできない。
最初は単なるサーバーの混雑で弾かれてるのかなぁと思い、少し時間が経ってから試すも進展なし。
そこでネットで調べてみると、どうやらこのアップロードにはJavaが使われており、Javaが悪さをしてる模様…。
言われてみれば、最近はJavaを勉強し始めJDK7を入れてこれをデフォルトにしていた記憶が…。
(バージョン6でないとエラーが出るそうです)

スクリーンショット 2012-11-11 23.45.44.png

ターミナルを開いて、「java -version」と入力。
やはりそうでした!!

ということで、以下の方法で解決しました。

  1. Finder > Macintosh HD > ライブラリ > Java > Java JavaVirtualMachines とアクセスをし、バージョン1.7のJavaSDKフォルダがあることを確認する
  2. 念のため、それをデスクトップなどにコピーをし、バックアップをとる
  3. ターミナルを開き、以下のコマンドを打つ
    cd /Library/Java/JavaVirtualMachines
  4. lsコマンドを使い、さきほどコピーしたJDKフォルダがあることを確認する(私の場合は「jdk1.7.0_06.jdk」)
  5. 以下のコマンドを打つ(フォルダを削除します)
    sudo rm -rf jdk1.7.0_06.jdk (フォルダ名の部分は適宜変えてください)
  6. パスワードの入力を促されるので、入力する
  7. ターミナルに以下のコマンドを打つ
    java -version
  8. このように、バージョンが1.6に戻っていたら完了です!スクリーンショット 2012-11-11 23.45.52.png

参照先:AppStore submissions fail after Java Update 2012-006 1.0

 

まさか、Javaが悪さをしてるとは思ってもみませんでした…。
とにかく、解決してよかったです。
 
 

最近話題の enchant.js でサシミプラスをWebアプリにしてみた。

Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

Node.jsとかenchant.jsとか、最近はJavaScript関連のお話がアツイですが、Web系にそんなにアンテナはっていなかったので、今回はiPhoneアプリのサシミプラスをWebアプリとして作ってみました。
iPhoneでもAndroidでもWindowsPhoneでもPS3でもWiiでも。もちろんパソコンでも。ブラウザが使える端末だったら動きます。

こちらからも↓

http://i.exilias.net/webapp/sashimi/

サシミプラス(iPhone)↓

http://i.exilias.net/sashimi.html

最近のソーシャルゲー(ブラウザゲー)が流行っているように、もはやマルチプラットフォームは当たり前で特定のデバイス向けにネイティブアプリを作る時代は終わりましたよね。これからWebで出来ることが増えてきたらどんどん衰退するんじゃないかなぁ。

時代はWebだ。

カナダ留学中にやったプレゼンテーションのスライドと原稿

Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

How to install my apps.

I’m talking about “How to install my applications.”

Before I talk this topic, I’m going to talk about Reasons for choosing it.

I’m a college freshman.
And I’m majoring in computer science & engineering.

I’m studying about computer programing, electric circuit and logic circuit in school.

So I have studied C language since 4 years ago.
C is one of the programing language.
Now, C is most famous computer language.
Do you know C language?

Today, I wasn’t going to use this white board, but I’d like to use it now because many friends used it.
So I’m going to introduce Hello World program which is the simplest program.

I like programing, so I’m studying another languages by myself.
For example, Objective-C, JavaScript, C++ and Java.
Oops, I forget the most important things.

I’m also studying English in school, but not good at.

I feel studying English is much more difficult than studying programing languages.

I like computer programing and I like video games very much.

As a result, I created a lot of video games.
3 Windows Games, 5 iPhone Games, 2 iPhone Utility Applications and 1 Android Game.

So, today, I’m going to teach you “How to install my applications.”

Windows applications.

My windows games are sold at specialty amateur video game store in Akihabara, Tokyo, Japan.
So if you want my games, please buy at store.

iPhone, iPod touch, and iPad applications.

My iPhone applications are available on the App Store which is online store.
So you can get it anytime anywhere.

Android application.

My Android application is available on the Android Market which is online store.
So you can get it anytime anywhere.

Even if I teach you how to install Windows applications, you can’t install it if you don’t live in Japan because it are sold at the store only in Japan.
As iPhone applications are sold in online store, so Android application is sold in online store.
And way to install application is also alike.
So I’m talking about “How to install my apps.”

1.Visit www.store.apple.com, and create your Apple ID to use Apple’s services. You have to input your Email address, Password, First Name and Last Name. Make sure you keep password in mind. Don’t forget. Phone Number is optional.

2.Tap the App Store icon, then App Store application starts.

3.Look down of screen and choose the Search tab, then you find a text field to input search words.

4.Input “exilias” into this field. And if you finished inputting search word, please tap “search” button.

5.The search result is displayed. My applications which are available on the App Store are Sashimi Plus, Touch the Aiueo, Bubble Wrap Action, Yoidehanaika, Paint Memo, QBeat and Blah Blah Blah Now. Then choose the application you want to have on your iPhone. Today, I select “Touch the Aiueo”, which is the most popular in applications I created. And this application was downloaded more than 200 thousand times. So Tap an item that you want.

6.App’s description is displayed. If you’re using mobile network(3G network), look down and verify application size is 20MB or less. If application size is more than 20MB, you have to use Wi-Fi network or iTunes on PC. After that tap “Free” button. Then the button is turned to “INSTALL” button.

7.Push “INSTALL” button. Then installation is started

8.Wait a minute until installation is over. If the icon of the application is displayed on Home Screen, all you have to do is finished.

9.Enjoy!

Finally, installation of Android applications is similar to installation of iPhone applications, so not only iPhone users but also Android users, please download my applications.

ちょうどEssayの宿題とプレゼンの準備が重なって朝の5時ごろまで死にそうな感じで準備してたので、いろいろと英文がアレですが、気にしないでください。
伝わればいいのさー。

マイクロソフトに行ってきた!

Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

うちの高専には一日研修という日があって、それは各学科がお勉強になる(好きな)ところに行くという日です。
そして、今回僕たちはあの超大企業であるマイクロソフトの主にXbox360を扱っているオフィスに行ってきました。
今年中(だったかな?)にいくつかに分散されている日本マイクロソフトのオフィスを一つに集約するらしいので、そのオフィスに遊びにいくのは僕たちが最後になるのではないでしょうか。

microsoft2010_001.jpg
朝日生命代田橋ビル

microsoft2010_002.jpg
△マイクロソフト株式会社

microsoft2010_003.jpg
△おお…… あのマイクロソフトだ

microsoft2010_004.jpg
microsoft2010_005.jpg
△おしゃれ

microsoft2010_006.jpg
△会議室

microsoft2010_007.jpg
△僕たちが案内された場所

microsoft2010_008.jpg
△配られたプレート

microsoft2010_009.jpg
△特大の寄せ書き
たぶん、これを記念に飾ってる
 →Xbox.com | イベントレポート – 200 人が笑った、喜んだ、祝った! Xbox 360 発売 1 周年を祝うユーザーオフ会開催

microsoft2010_010.jpg
△\わたしです/

microsoft2010_011.jpg
△や ら な い か

microsoft2010_012.jpg
△\わたしです/

microsoft2010_013.jpg
microsoft2010_014.jpg
microsoft2010_015.jpg
△みんな上手い

microsoft2010_016.jpg
△部屋の中はこんな感じ

microsoft2010_017.jpg
△今回お話してくれる方々がご到着

microsoft2010_018.jpg
△配られたアンケート用紙

microsoft2010_019.jpg
△お茶のサービス

microsoft2010_020.jpg
△まずお話してくれるのは、楠原史子さん

microsoft2010_021.jpg
△マイクロソフトへようこそ!

microsoft2010_022.jpg
△自己紹介

microsoft2010_023.jpg
△質問です

microsoft2010_024.jpg
△やっぱり、ゲイツ

microsoft2010_026.jpg
△OSよりOfficeの方が売れてます

microsoft2010_027.jpg
△アジア・パシフィックというくくりに入らず、「日本」という独立した市場

microsoft2010_028.jpg
△さあ、アメリカにある本社を見てみましょう

microsoft2010_029.jpg
microsoft2010_030.jpg
microsoft2010_031.jpg
△Bingマップで紹介。ここで一言「マップと言ったらBingですよ!」

microsoft2010_032.jpg
△日本だと一つの部屋にパソコンがたくさん並んでるイメージですが、アメリカのオフィスは一人一つの部屋

microsoft2010_033.jpg
△マイクロソフト創業時のビジョン「全ての机に家庭にコンピュータを」

microsoft2010_034.jpg
△現在「世界中のすべての人々とビジネスの持つ可能性を最大限に引き出すための支援をすること」

microsoft2010_035.jpg
△すごくマイクロソフト的なスライドデザイン

microsoft2010_036.jpg
△とりあえず、いろんな機器にWindowsは入っています

microsoft2010_037.jpg
△情報教育推進部の役割

ここで楠原さんのプレゼンは終了。
ありがとうございました。

microsoft2010_038.jpg
△つづいて群馬高専出身の大川高志さん

microsoft2010_039.jpg
△僕たちの先輩ということで、将来のためになるお話


△「群馬高専の思い出」
わざわざビデオまで作っていただきました。

microsoft2010_040.jpg
△もくじ

microsoft2010_041.jpg
△群馬高専→筑波大学→東工大大学院→マイクロソフト

microsoft2010_042.jpg
△マイクロソフトでのお仕事

microsoft2010_043.jpg
△部活の思い出

microsoft2010_044.jpg
△バイトの思い出

microsoft2010_045.jpg
△大学の思い出

microsoft2010_046.jpg
△大学院の思い出

microsoft2010_047.jpg
△マイクロソフトに入社

ここで質問。
「高専で役に立った教科はどれだと思いますか?」

microsoft2010_048.jpg
△答え「全部」

microsoft2010_049.jpg
microsoft2010_050.jpg
△ゴメンナサイ。オチのネタをあろうことがピンぼけしてしましました。
ドラクエ風の画面で「目の前に大きなチャンスが転がっている。つかみますか?」

microsoft2010_051.jpg
△Your potential. Our passion.(あなたの可能性。私たちの情熱)
「『すべての人が持っている、限りない可能性を引き出すこと』が、マイクロソフトのあらゆる活動の源となる」

ここで大川さんのプレゼンは終了。
ありがとうございました。

microsoft2010_052.jpg
△続いてはアカデミックエバンジェリストの渡辺弘之さん

microsoft2010_053.jpg
△サン・マイクロシステムズ(Java作ってる会社)→マイクロソフト

microsoft2010_054.jpg
△渡辺さん。かっこいい。

microsoft2010_055.jpg
△3スクリーン+クラウド

ここでマイクロソフトの技術を紹介する動画。


△Project Natal


△Microsoft Productivity Future Vision
マイクロソフトが描く10年後の未来。

microsoft2010_056.jpg
△マイクロソフトの最新テクノロジー

microsoft2010_057.jpg
△技術力・応用力・国際力が重要

microsoft2010_058.jpg
△学生向けの無料ダウンロードサービスを活用しよう!

microsoft2010_059.jpg
microsoft2010_060.jpg
△世界へチャレンジ!

microsoft2010_061.jpg
△まとめ

ここで渡辺さんのプレゼンが終了。
ありがとうございました。

microsoft2010_025.jpg
microsoft2010_062.jpg
△ドリームスパークのライセンスとボールペン、ハンドタオル、ブックカバーを記念にもらいました

ということで、夢のような一日を過ごしてきました。
プレゼンターの中に高専出身の方がいた事にも驚き。とんだサプライズでした。
お話もためになるものばかりで非常に有益な時間を過ごさせていただきました。ありがとうございました。

純粋に、楽しかった!

※画像は許可をとり撮影させていただきましたが、なにか不都合のある場合はご連絡ください。