2020年10月16日
anndoroid studio USBカメラをキャプチャしたとき ガミラス人の顔が写るんです
anndoroid studio USBカメラをキャプチャしたときの怪奇現象
青い 昔の ガミラス人の顔が写った。
原因不明 パット見た感じ 赤と青が入れ替わったような画像がでてきてびっくり
仕方がないので
RとBを入替えて キャプチャしたら まともなような気がする。
なんでだろう ♪ なんでだろう? ♪♪♪♪♪ なんでガミラス人♪ちゃんちゃんと
このディレクトリに書くと google photo でみた時 ライブラリというアイコンをタップすると見えた
どこに保存されているのかしらないが google photo でみえたのでいいことし
public static final String DIRECTORY_NAME = "Pictures";
キャプチャした画像を保存したい path 例としてはこんな感じだ
String picPath = UVCCameraHelper.ROOT_PATH + DIRECTORY_NAME +"/cap" +
System.currentTimeMillis() + UVCCameraHelper.SUFFIX_JPEG;
カメラから取り込まれた 画像データdata
これは public void onPreviewResult(byte[] nv21Yuv,int mWidth,int mHeight)
からもらってきたものだ。 幅も高さも取り込まれたときにわかるのだ
これらを JPEGにしたいのだが こんな調子でつくる
カメラからは nv21Yuv の形式でデータがくると思ってたのだけど R,Bが入れ替わってるなぁ
ここがなんでだろう ?なんでだろう? わからん
とったデータを ファイルに書き込む
private void saveYuv2JpegUVCcammera(String path, byte[] data,int mWidth,int mHeight)
{
int[] mIntArray = new int[mWidth*mHeight];
{
decodeYUV420SP(mIntArray, data, mWidth, mHeight);
Bitmap bmpfromRGB = Bitmap.createBitmap(mIntArray, mWidth, mHeight, Bitmap.Config.ARGB_8888);
try {
FileOutputStream fos = new FileOutputStream(path);
bmpfromRGB.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
ここからは 見てもわかんないのだけど yuv420を RGBにするらしい
static public void decodeYUV420SP(int[] rgb, byte[] yuv420sp, int width, int height) {
final int frameSize = width * height;
for (int j = 0, yp = 0; j < height; j++) {
int uvp = frameSize + (j >> 1) * width, u = 0, v = 0;
for (int i = 0; i < width; i++, yp++) {
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);
rgb[yp] = 0xff000000 | ((b << 6) & 0xff0000) | ((g >> 2) & 0xff00) | ((r >> 10) & 0xff);
}
}
}
とにかく RとBをいれかえて ビットマップにして書き込みするとできた
だからいったいのなんなのだろう
青い 昔の ガミラス人の顔が写った。
原因不明 パット見た感じ 赤と青が入れ替わったような画像がでてきてびっくり
仕方がないので
RとBを入替えて キャプチャしたら まともなような気がする。
なんでだろう ♪ なんでだろう? ♪♪♪♪♪ なんでガミラス人♪ちゃんちゃんと
色だけ入替えてみた
このディレクトリに書くと google photo でみた時 ライブラリというアイコンをタップすると見えた
どこに保存されているのかしらないが google photo でみえたのでいいことし
public static final String DIRECTORY_NAME = "Pictures";
キャプチャした画像を保存したい path 例としてはこんな感じだ
String picPath = UVCCameraHelper.ROOT_PATH + DIRECTORY_NAME +"/cap" +
System.currentTimeMillis() + UVCCameraHelper.SUFFIX_JPEG;
カメラから取り込まれた 画像データdata
これは public void onPreviewResult(byte[] nv21Yuv,int mWidth,int mHeight)
からもらってきたものだ。 幅も高さも取り込まれたときにわかるのだ
これらを JPEGにしたいのだが こんな調子でつくる
カメラからは nv21Yuv の形式でデータがくると思ってたのだけど R,Bが入れ替わってるなぁ
ここがなんでだろう ?なんでだろう? わからん
とったデータを ファイルに書き込む
private void saveYuv2JpegUVCcammera(String path, byte[] data,int mWidth,int mHeight)
{
int[] mIntArray = new int[mWidth*mHeight];
{
decodeYUV420SP(mIntArray, data, mWidth, mHeight);
Bitmap bmpfromRGB = Bitmap.createBitmap(mIntArray, mWidth, mHeight, Bitmap.Config.ARGB_8888);
try {
FileOutputStream fos = new FileOutputStream(path);
bmpfromRGB.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
ここからは 見てもわかんないのだけど yuv420を RGBにするらしい
static public void decodeYUV420SP(int[] rgb, byte[] yuv420sp, int width, int height) {
final int frameSize = width * height;
for (int j = 0, yp = 0; j < height; j++) {
int uvp = frameSize + (j >> 1) * width, u = 0, v = 0;
for (int i = 0; i < width; i++, yp++) {
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);
rgb[yp] = 0xff000000 | ((b << 6) & 0xff0000) | ((g >> 2) & 0xff00) | ((r >> 10) & 0xff);
}
}
}
とにかく RとBをいれかえて ビットマップにして書き込みするとできた
だからいったいのなんなのだろう
タグ:アンドロイドプログラム
【このカテゴリーの最新記事】
-
no image
-
no image
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/10274810
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック