У меня есть размер изображения 640 x480
, и я хочу использовать yv12 в качестве выходного формата. изображение обрабатывается некоторым API, и я хочу получить выход в формате YV12.буфер форматирования в соответствии с форматом YUV420P
Что я пытаюсь на данный момент является то, что
ширина INT = 640;
int height = 480;байт [] byteArray = новый байт [Convert.ToInt32 ((ширина * высота + (2 * ((ширина * высота)/4))) * 1.5)];
captureDevice.GetPreviewBufferYCbCr (ByteArray,) ");
int YLength = Convert.ToInt32(width * height * 1.5);
// UVlength multipled by 2 because it is for both u and v
int UVLength = Convert.ToInt32(2 * (width/2) * (weight/2)) * 1.5);
var inputYBuffer = byteArray.AsBuffer(0, YLength);
var inputUVBuffer = byteArray.AsBuffer(YLength, UVLength);
var inputBuffers = new IBuffer[] { inputYBuffer, inputUVBuffer };
var inputScanlines = new uint[] { (uint)YLength, (uint)UVLength };
/////Creating input buffer that supports Nv12 format
Bitmap inputBtm = new Bitmap(
outputBufferSize,
ColorMode.Yvu420Sp,
inputScanlines, // 1.5 bytes per pixel in Yuv420Sp mode
inputBuffers);
//As v length is same as u length in output buffer so v length can be used in both place.
int vLength = UVLength/2;
var outputYBuffer = byteArray.AsBuffer(0, YLength);
var outputVBuffer = byteArray.AsBuffer(YLength, vLength);
var outputUBuffer = byteArray.AsBuffer(YLength + vLength, vLength);
var outputBuffers = new IBuffer[] { outputYBuffer, outputVBuffer, outputUBuffer };
//
var outputScanlines = new uint[] { (uint)YLength, (uint)vLength, (uint)vLength };
Bitmap outputBtm = new Bitmap(
outputBufferSize,
ColorMode.Yuv420P,
outputScanlines,
outputBuffers);**strong text**
так, что я хочу спросить, что я создаю в OUTPUTBUFFER правильно в соответствии с форматом YUV420P Существует АНИ, в котором я передаю. входной буфер в NV12, и я предполагаю, что он даст мне выходной буфер в формате YV12 (YUV420P). Так что я создал плоскость Y и имеет width x height x 1.5
байт. 1.5, потому что YV12 - это 12 бит для мата и аналогично U имеет width/2 x height/2 x 1.5
байт, а также V-плоскость. На данный момент меня не волнуют YUV420P и YVU420P, пока мой формат правильный, и i просто нужно поменять местами и U и V самолеты.
Вы можете объяснить, почему у вас есть: - byte [] byteArray = новый байт [Convert.ToInt32 ((ширина * высота + (2 * ((ширина * высота)/4))) * 1.5)]; – ashishdhiman2007