+ // TODO implement halfSize
+ int width = getWidth();
+ int height = getHeight();
+ int[] pixels = new int[width * height];
+ byte[] yuv = yuvData;
+ int dataWidth = this.dataWidth;
+ int inputOffset = (top * dataWidth + left) << 1;
+
+ for (int y = 0; y < height; y++) {
+ int outputOffset = y * width;
+ for (int x = 0; x < width; x += 2) {
+ int localOffset = inputOffset + (x << 1);
+ int y1 = yuv[localOffset] & 0xFF;
+ int u = yuv[localOffset + 1] & 0xFF;
+ int y2 = yuv[localOffset + 2] & 0xFF;
+ int v = yuv[localOffset + 3] & 0xFF;
+ int rgb1 = yuvToRGB(y1, u, v);
+ int rgb2 = yuvToRGB(y2, u, v);
+ pixels[outputOffset + x] = OPAQUE_ALPHA | rgb1;
+ pixels[outputOffset + x + 1] = OPAQUE_ALPHA | rgb2;
+ }
+ inputOffset += (dataWidth << 1);
+ }
+
+ Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+ bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
+ return bitmap;