Во время процесса кодирования с помощью кодера x265 (https://x265.readthedocs.org/en/default/api.html) Я хочу записать значения пикселей изображения (в частности, значения канала Y) в файл .txt после того, как закодировано новое изображение (не важно, почему). Для этого я использую переменную «плоскости» класса x265_picture:
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 …), которые «создают» нашивки. Может кто-нибудь сказать мне, что мне не хватает?
спасибо, ребята, только что решил это … ключ использует ‘src + = srcStride’:
ofstream out_file("out_file.txt");
int srcStride = pic_out->stride[0] / sizeof(pixel);
uint8_t* src = (uint8_t*) pic_out->planes[0];
for (int y = 0; y < m_param->sourceHeight; y++, src += srcStride)
{
for (int x = 0; x < m_param->sourceWidth; x++)
out_file << (int)(src[x]) << ",";
}
out_file.close();
Других решений пока нет …