Во время процесса кодирования с кодировщиком x265 (https://x265.readthedocs.org/en/default/api.html) Я хочу записать значения пикселов изображения (в частности, значения Y-канала) в .txt-файл после кодирования нового изображения (не важно почему). Для этого я использую переменную 'Planes' класса x265_picture:x265 Encoder: порядок значений в массиве 'плоскостей'
x265_picture* pic_out; # variable where encoded image is to be stored
... # encoding process
uint8_t *plane = (uint8_t*)pic_out->planes[0];
uint32_t pixelCount = x265_picturePlaneSize(pic_out->colorSpace, m_param->sourceWidth, m_param->sourceHeight, 0);
ofstream out_file("out_file.txt");
for (uint32_t j = 0; j < pixelCount; j++) # loop for all pixels
{
int pix_val = plane[j];
out << pix_val;
}
ofstream.close()
Но когда я восстановить выходные данные в образ, я получаю
вместо
или другой пример:
вместо
(цвет не важен, «полоса» является концерном)
В выходном файле существует, кажется, интервалы данных в (по-видимому) правильный порядок (скажем, 89,90,102,98, ...), за которым следует всегда длинная последовательность равных чисел (например. 235,235,235,235 ... или 65,65,65,65 ...), которые «создают» полосы. Может кто-нибудь, пожалуйста, скажите мне, что мне не хватает?
Где вы получаете функцию x265_picturePlaneSize? Я не вижу его в заголовке. – Pescolly
не использовали это некоторое время, но он находится в x265/source/common/common.cpp – user2208392
его определение: uint32_t x265_picturePlaneSize (int csp, int width, int height, int plane) { uint32_t size = (uint32_t) (ширина >> x265_cli_csps [csp] .width [plane]) * (высота >> x265_cli_csps [csp] .height [plane]); размер возврата; } – user2208392