Bitmapの生成について

1,044 views
Skip to first unread message

Jyunji

unread,
Aug 13, 2008, 5:13:18 PM8/13/08
to Android-SDK-Japan
Bitmapの生成について、良い方法がないか教えてください。

カメラのセンサーからYUV420形式で静止画データを読み込んでいます。
これをAndroidのアプリでBitmapとして扱うために、以下の手順を経ています。

1) Linuxのnativeアプリで、センサーからYUV420形式のデータを読み込む。
2) Linuxのnativeアプリで、YUV420からRGB888にデータを変換する。
3) Linuxのnativeアプリで、RGB888のデータをPNGフォーマットに変換する。
4) Androidのアプリが、Linuxのnativeアプリとsocketで通信し、BitmapFactory.decodeStream()
を使ってPNGからBitmapを生成する。

Androidのアプリで、YUV420(またはRGB888)のデータから直接Bitmapを生成できると良いのですが、何か方法はありますか?

よろしくお願いします。

[API Exp]Makoto Anjo

unread,
Aug 14, 2008, 1:09:59 AM8/14/08
to Android-SDK-Japan
安生です。

少々調べてみたのですが、javax.media.format.VideoFormat がAndroidにはないのですよね。
他にYUVを読んでbitmapに変換できるpackageがあれば良いのですが。

ひとまずは、
R = 1.000Y + 1.402V
G = 1.000Y - 0.344U - 0.714V
B = 1.000Y + 1.772U
ということで自分で実装するのもアリかと思います。

他にも以下のように違う方法で実装している方もいらっしゃるようですが。
http://www.tomgibara.com/android/camera-source

もう少し調べてみます。
-----
安生 真
Makoto Anjo
http://blog.akaiho.com/

Jyunji

unread,
Aug 14, 2008, 8:52:59 PM8/14/08
to Android-SDK-Japan
安生さん、

On 8月14日, 午後2:09, "[API Exp]Makoto Anjo" <tennet...@gmail.com> wrote:
> 安生です。
>
> 少々調べてみたのですが、javax.media.format.VideoFormat がAndroidにはないのですよね。
> 他にYUVを読んでbitmapに変換できるpackageがあれば良いのですが。
>
> ひとまずは、
> R = 1.000Y + 1.402V
> G = 1.000Y - 0.344U - 0.714V
> B = 1.000Y + 1.772U
> ということで自分で実装するのもアリかと思います。

そうですね。
その他の方法として、カメラ側の設定を変えるとRGB888でデータが取れそうなので、YUV→RGBは回避できないかトライしてみます。

> 他にも以下のように違う方法で実装している方もいらっしゃるようですが。http://www.tomgibara.com/android/camera-source

情報ありがとうございます。SocketCamera の実装が参考になりそうです。
WebcamBroadcaster と連携するようですが、パッとみたところWebcamBroadcasterでRGB888からJPEGに
ImageIOで変換してSocketCamera側に渡しているようです。
そしてBitmapFactoryでJPEGからBitmapを生成しています。

JPEG変換を行わずRGB888から直接Bitmapを生成できると、処理時間や画質の点でうれしいです。

> もう少し調べてみます。

よろしくお願いします。

mizmit1222

unread,
Aug 14, 2008, 10:23:45 PM8/14/08
to Android-SDK-Japan
みずのです。こんにちは。

PNGは無圧縮というオプションが選択できるようですが。64KBを超える場合
の処理がどーなるか、ライブラリのコードを読んでみないとなんとも。

YUV->RGB変換とかは、PacketVideoのOpenCOREで面倒見てくれても
よさそうなのですが、まだドキュメントがありません。Java APIに相当するであ
ろうandroid.mediaパッケージのドキュメントもあっさりしすぎで、まだ開発途
中な感じ。

ちなみに。SDKのドキュメント docs/what-is-android.html の Libraries
には以下のように「静止画サポートもあるよ」という記述があります。
o Media Libraries - based on PacketVideo's OpenCORE; the libraries
support playback and recording of many popular audio and video
formats, as well as static image files,

ではでは。

Jyunji

unread,
Aug 18, 2008, 4:22:17 AM8/18/08
to Android-SDK-Japan
みずのさん、

> PNGは無圧縮というオプションが選択できるようですが。64KBを超える場合
> の処理がどーなるか、ライブラリのコードを読んでみないとなんとも。

なるほど、無圧縮の形式ならばRGB888のデータをlibpngを使わずに自分で加工できそうですね。libpngを使わなければ一旦ファイルに書き
出す必要もないし。

ちなみに、GIMPで生成したPNGだと、8KB単位でIDATが区切られるようです。

> ちなみに。SDKのドキュメント docs/what-is-android.html の Libraries
> には以下のように「静止画サポートもあるよ」という記述があります。

このあたりは、ドキュメントの充実に期待です。

では。
Reply all
Reply to author
Forward
0 new messages