public Bitmap takePicture() { Bitmap bm = null; byte[] ba; if (getCommands != null) { ba = getCommands.getPictureArray(); bm = Bitmap.createBitmap(256, 192, Bitmap.Config.ARGB_8888); int w = 256; int h = 192; int vy, vu, y1v, y1u, uy, uv, y2u, y2v; int V = 0, Y = 0, U = 0; for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { if (j >= 3) { vy = -1; vu = 2; y1v = -1; y1u = -3; uy = -1; uv = -2; y2u = -1; y2v = -3; } else { vy = 1; vu = 2; y1v = 3; y1u = 1; uy = 1; uv = 2; y2u = 3; y2v = 1; } if ((j % 4) == 0) { V = ba[i * w + j] & 0xff; Y = ba[i * w + j + vy] & 0xff; U = ba[i * w + j + vu] & 0xff; } else if ((j % 4) == 1) { Y = ba[i * w + j] & 0xff; V = ba[i * w + j + y1v] & 0xff; U = ba[i * w + j + y1u] & 0xff; } else if ((j % 4) == 2) { U = ba[i * w + j] & 0xff; Y = ba[i * w + j + uy] & 0xff; V = ba[i * w + j + uv] & 0xff; } else if ((j % 4) == 3) { Y = ba[i * w + j] & 0xff; U = ba[i * w + j + y2u] & 0xff; V = ba[i * w + j + y2v] & 0xff; } U = U - 128; V = V - 128; // Y = Y; bm.setPixel( j, i, Color.rgb( (int) Math.max(Math.min(Y + 1.13983 * V, 255), 0), (int) Math.max(Math.min(Y - 0.39466 * U - 0.58060 * V, 255), 0), (int) Math.max(Math.min(Y + 2.03211 * U, 255), 0))); } } } return bm; }