こんにちわ ねこめしです。
(2012/06/03 3:45),
bocre...@yahoo.co.jp wrote:
> bmp2が実行されることはなくなりました.
> これは,オブジェクト名の宣言をクラスのはじめでしていても,
> メソッド内で作成したオブジェクトはそのメソッド内でしか使えないということでいいのでしょうか.
> 本当に初歩的な質問で申し訳ありません.
onPictureTaken()はコールバックなので、onTouchEvent()ですぐに呼び
出されるわけではありません。touch eventを拾って、そのあとシャッタが
切れたあとに呼び出されます。ですので元のコードですと
bmp = BitmapFactory.decodeByteArray(data, 0, data.length, null);
より先に
if(bmp!=null){
が実行されているはずです。
ココらへんはブレークポイントをおくなりLogCatを見るなりすると
わかると思います。
あと関係無いですが、
onPictureTaken()の中で
bmp = BitmapFactory.decodeByteArray(data, 0, data.length, null);
とするのはやめたほうがいいですよ。
dataはjpegデータですが、それが展開されてbmpに入るため
bmpは非常に大きなサイズ(解像度にもよりますが)になります。そのため
メモリ不足になるケースが多いです。
よろしくお願いします
>>> int y = (0xff& ((int) yuv420sp[yp])) - 16;
>>
>>> if (y< 0) y = 0;
>>> if ((i& 1) == 0) {
>>> v = (0xff& yuv420sp[uvp++]) - 128;
>>> u = (0xff& yuv420sp[uvp++]) - 128;
>>> }
>>
>>> int y1192 = 1192 * y;
>>> int r = (y1192 + 1634 * v);
>>> int g = (y1192 - 833 * v - 400 * u);
>>> int b = (y1192 + 2066 * u);
>>
>>> if (r< 0) r = 0; else if (r> 262143) r = 262143;
>>> if (g< 0) g = 0; else if (g> 262143) g = 262143;
>>> if (b< 0) b = 0; else if (b> 262143) b = 262143;
>>
>>> rgb[yp] = 0xff000000 | ((r<< 6)& 0xff0000) | ((g
>>
>>> 2)& 0xff00) | ((b>> 10)& 0xff);