本文整理汇总了Java中android.media.Image.getPlanes方法的典型用法代码示例。如果您正苦于以下问题:Java Image.getPlanes方法的具体用法?Java Image.getPlanes怎么用?Java Image.getPlanes使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类android.media.Image
的用法示例。
在下文中一共展示了Image.getPlanes方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: imageAvailable
import android.media.Image; //导入方法依赖的package包/类
/**
* 图像可用时截屏
*
* @param reader
* @param path
*@param callback @return
*/
private void imageAvailable(ImageReader reader, String path, IRecordShotCallback callback) {
mImageReaderLock.lock();
try{
Image image = reader.acquireLatestImage();
if(image == null) return;
int width = image.getWidth();
int height = image.getHeight();
final Image.Plane[] planes = image.getPlanes();
final ByteBuffer buffer = planes[0].getBuffer();
int pixelStride = planes[0].getPixelStride();
int rowStride = planes[0].getRowStride();
int rowPadding = rowStride - pixelStride * width;
Bitmap bitmap = Bitmap.createBitmap(width + rowPadding / pixelStride, height, Bitmap.Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(buffer);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height);
image.close();
//需要在这里释放图片否则会截取很多图片
release();
saveBitmap(path, bitmap, callback);
}finally {
mImageReaderLock.unlock();
}
}
示例2: decodeToBitmap
import android.media.Image; //导入方法依赖的package包/类
private Bitmap decodeToBitmap(final Image img) {
Image.Plane[] planes = img.getPlanes();
if (planes[0].getBuffer() == null) {
return null;
}
int width = img.getWidth();
int height = img.getHeight();
int pixelStride = planes[0].getPixelStride();
int rowStride = planes[0].getRowStride();
int rowPadding = rowStride - pixelStride * width;
Bitmap bitmap = Bitmap.createBitmap(
width + rowPadding / pixelStride, height,
Bitmap.Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(planes[0].getBuffer());
img.close();
return Bitmap.createBitmap(bitmap, 0, 0, width, height, null, true);
}
示例3: extract
import android.media.Image; //导入方法依赖的package包/类
/**
* Extracts the Y-Plane from the YUV_420_8888 image to creates a IntensityPlane.
* The actual plane data will be copied into the new IntensityPlane object.
*
* @throws IllegalArgumentException if the provided images is not in the YUV_420_888 format
*/
@NonNull
public static IntensityPlane extract(@NonNull Image img) {
if (img.getFormat() != ImageFormat.YUV_420_888) {
throw new IllegalArgumentException("image format must be YUV_420_888");
}
Image.Plane[] planes = img.getPlanes();
ByteBuffer buffer = planes[0].getBuffer();
byte[] yPlane = new byte[buffer.remaining()];
buffer.get(yPlane);
int yRowStride = planes[0].getRowStride();
return new IntensityPlane(img.getWidth(), img.getHeight(), yPlane, yRowStride);
}
示例4: toByteArray
import android.media.Image; //导入方法依赖的package包/类
private static byte[] toByteArray(Image image) {
byte[] data = null;
if (image.getFormat() == ImageFormat.JPEG) {
Image.Plane[] planes = image.getPlanes();
ByteBuffer buffer = planes[0].getBuffer();
data = new byte[buffer.capacity()];
buffer.get(data);
return data;
} else if (image.getFormat() == ImageFormat.YUV_420_888) {
data = NV21toJPEG(
YUV_420_888toNV21(image),
image.getWidth(), image.getHeight());
} else {
Log.w(TAG, "Unrecognized image format: " + image.getFormat());
}
return data;
}
示例5: GetBitmapFromImageReader
import android.media.Image; //导入方法依赖的package包/类
/**
* Retrieve Bitmap with specific format from ImageReader.
*
* @param imageReader the image reader
* @return bitmap
*/
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public static Bitmap GetBitmapFromImageReader(ImageReader imageReader) {
Bitmap bitmap;
//get image buffer
Image image = imageReader.acquireLatestImage();
final Image.Plane[] planes = image.getPlanes();
final ByteBuffer buffer = planes[0].getBuffer();
int pixelStride = planes[0].getPixelStride();
int rowStride = planes[0].getRowStride();
int rowPadding = rowStride - pixelStride * image.getWidth();
// create bitmap
bitmap = Bitmap.createBitmap(image.getWidth() + rowPadding / pixelStride, image.getHeight(), Bitmap.Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(buffer);
image.close();
return bitmap;
}
示例6: Serialize
import android.media.Image; //导入方法依赖的package包/类
public static byte[] Serialize(Image image)
{
if (image==null)
return null;
Image.Plane[] planes = image.getPlanes();
// NV21 expects planes in order YVU, not YUV:
if (image.getFormat() == ImageFormat.YUV_420_888)
planes = new Image.Plane[] {planes[0], planes[2], planes[1]};
byte[] serializeBytes = new byte[getSerializedSize(image)];
int nextFree = 0;
for (Image.Plane plane: planes)
{
ByteBuffer buffer = plane.getBuffer();
buffer.position(0);
int nBytes = buffer.remaining();
plane.getBuffer().get(serializeBytes, nextFree, nBytes);
nextFree += nBytes;
}
return serializeBytes;
}
示例7: SequentialIterator
import android.media.Image; //导入方法依赖的package包/类
public SequentialIterator(Image image, Rect area, boolean duplicateBuffer) {
super(image, area, duplicateBuffer);
Image.Plane plane = image.getPlanes()[0];
int pixelStride = plane.getPixelStride();
mRowStride = plane.getRowStride();
mWidth = area.width();
mHeight = area.height();
int rowPadding = mRowStride - pixelStride * image.getWidth();
mSkipPerRow = rowPadding + (image.getWidth() - mWidth) * pixelStride;
int offset = mIterateArea.top * mRowStride + mIterateArea.left * pixelStride;
mByteBuffer.position(offset);
}
示例8: CentralSpiralIterator
import android.media.Image; //导入方法依赖的package包/类
public CentralSpiralIterator(Image image, Rect area, boolean duplicateBuffer) {
super(image, area, duplicateBuffer);
Image.Plane plane = image.getPlanes()[0];
mPixelStride = mNextStepSkip = plane.getPixelStride();
mRowStride = plane.getRowStride();
mByteBuffer.position(area.centerX() * mPixelStride + area.centerY() * mRowStride);
}
示例9: imageToByteArray
import android.media.Image; //导入方法依赖的package包/类
public static byte[] imageToByteArray(Image image) {
byte[] data = null;
if (image.getFormat() == ImageFormat.JPEG) {
Image.Plane[] planes = image.getPlanes();
ByteBuffer buffer = planes[0].getBuffer();
data = new byte[buffer.capacity()];
buffer.get(data);
return data;
} else if (image.getFormat() == ImageFormat.YUV_420_888) {
data = NV21toJPEG(
YUV_420_888toNV21(image),
image.getWidth(), image.getHeight());
}
return data;
}
示例10: toBitmap
import android.media.Image; //导入方法依赖的package包/类
public static Bitmap toBitmap(Image image) {
Image.Plane plane = image.getPlanes()[0];
ByteBuffer buffer = plane.getBuffer();
buffer.position(0);
int pixelStride = plane.getPixelStride();
int rowPadding = plane.getRowStride() - pixelStride * image.getWidth();
Bitmap bitmap = Bitmap.createBitmap(image.getWidth() + rowPadding / pixelStride, image.getHeight(), Bitmap.Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(buffer);
return bitmap;
}
示例11: onImageAvailable
import android.media.Image; //导入方法依赖的package包/类
@Override
public void onImageAvailable(ImageReader reader) {
Image mImage = null;
FileOutputStream fos = null;
try {
mImage = mImageReader.acquireLatestImage();
if (mImage != null) {
int imgWidth = mImage.getWidth();
int imgHeight = mImage.getHeight();
Image.Plane[] planes = mImage.getPlanes();
ByteBuffer buffer = planes[0].getBuffer();
int pixelStride = planes[0].getPixelStride();
int rowStride = planes[0].getRowStride();
int rowPadding = rowStride - pixelStride * imgWidth;
Buffer buffer2 = planes[0].getBuffer().rewind();
bmp = Bitmap.createBitmap(imgWidth + rowPadding / pixelStride, imgHeight, Bitmap.Config.ARGB_8888);
bmp.copyPixelsFromBuffer(buffer2);
lastBmp = bmp.copy(bmp.getConfig(), true);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bmp != null) {
bmp.recycle();
}
if (mImage != null) {
mImage.close();
}
}
}
示例12: screenShot
import android.media.Image; //导入方法依赖的package包/类
public Bitmap screenShot() {
log.d("screenShot " + imageReader);
Image image = imageReader.acquireLatestImage(); //获取缓冲区中的图像,关键代码
if (image == null)
return null;
boolean b = true;
if (b) {
int width = image.getWidth();
int height = image.getHeight();
final Image.Plane[] planes = image.getPlanes();
final ByteBuffer buffer = planes[0].getBuffer();
//每个像素的间距
int pixelStride = planes[0].getPixelStride();
//总的间距
int rowStride = planes[0].getRowStride();
int rowPadding = rowStride - pixelStride * width;
Bitmap bitmap = Bitmap.createBitmap(width + rowPadding / pixelStride, height,
Bitmap.Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(buffer);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height);
image.close();
return bitmap;
}
return null;
}
示例13: convertYuv420ToBitmap
import android.media.Image; //导入方法依赖的package包/类
private static Bitmap convertYuv420ToBitmap(Image image) {
RenderScript rs = mRenderScript;
final int width = image.getWidth();
final int height = image.getHeight();
// prepare input Allocation for RenderScript
Type.Builder inType = new Type.Builder(rs, Element.U8(rs)).setX(width).setY(height).setYuvFormat(ImageFormat.YV12);
Allocation inAlloc = Allocation.createTyped(rs, inType.create(), Allocation.USAGE_SCRIPT);
byte[] rawBuffer = new byte[inAlloc.getBytesSize()];
int lumaSize = width * height;
int chromaSize = (width / 2) * (height / 2);
Image.Plane[] planes = image.getPlanes();
planes[0].getBuffer().get(rawBuffer, 0, lumaSize);
planes[1].getBuffer().get(rawBuffer, lumaSize, chromaSize);
planes[2].getBuffer().get(rawBuffer, lumaSize + chromaSize, chromaSize);
inAlloc.copyFromUnchecked(rawBuffer);
// prepare output Allocation for RenderScript
Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Allocation outAlloc = Allocation.createFromBitmap(rs, bmp, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT | Allocation.USAGE_SHARED);
// convert YUV to RGB colorspace
ScriptC_yuv2rgb converter = new ScriptC_yuv2rgb(rs);
converter.set_gYUV(inAlloc);
converter.forEach_convert(outAlloc);
outAlloc.copyTo(bmp);
return bmp;
}
示例14: doInBackground
import android.media.Image; //导入方法依赖的package包/类
@Override
protected Bitmap doInBackground(Image... params) {
if (params == null || params.length < 1 || params[0] == null) {
L.e(" params is null ...");
return null;
}
Image image = params[0];
int width = image.getWidth();
int height = image.getHeight();
final Image.Plane[] planes = image.getPlanes();
final ByteBuffer buffer = planes[0].getBuffer();
//每个像素的间距
int pixelStride = planes[0].getPixelStride();
//总的间距
int rowStride = planes[0].getRowStride();
image.close();
int rowPadding = rowStride - pixelStride * width;
Bitmap bitmap = Bitmap.createBitmap(width + rowPadding / pixelStride, height, Bitmap.Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(buffer);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height);
image.close();
compressAndWrite(bitmap);
return null;
}
示例15: pixel
import android.media.Image; //导入方法依赖的package包/类
public static int pixel(Image image, int x, int y) {
int originX = x;
int originY = y;
ScreenMetrics metrics = new ScreenMetrics(image.getWidth(), image.getHeight());
x = metrics.rescaleX(x);
y = metrics.rescaleY(y);
Image.Plane plane = image.getPlanes()[0];
int offset = y * plane.getRowStride() + x * plane.getPixelStride();
int c = plane.getBuffer().getInt(offset);
Log.d("Images", String.format(Locale.getDefault(), "(%d, %d)→(%d, %d)", originX, originY, x, y));
return (c & 0xff000000) + ((c & 0xff) << 16) + (c & 0x00ff00) + ((c & 0xff0000) >> 16);
}