BitmapSource эквивалент в C ++? - PullRequest
0 голосов
/ 12 марта 2019

У меня есть рабочий код, написанный на C #, который принимает массив байтов, представляющий растровое изображение, и кодирует его в base64, чтобы его можно было показать в браузере.

byte[] bitmap = {...} //getting it from c++ .dll
BitmapSource bs = BitmapSource.Create(w, h, 96, 96, PixelFormats.Bgra32, null, bitmap, Bitmap_Raw_Stride);
return Convert.ToBase64String(bs);

Работает нормально, но мне нужно сделать то же самое в C ++. У меня есть мой байтовый массив, который содержит то же самое, что байтовый массив в C #. Проблема в том, что BitmapSource сжимает растровое изображение, и я не понимаю, как, от 10 Мо до 1,5 Мо для некоторых растровых изображений. Как это делается?

На самом деле, мне удается закодировать мой растровый буфер c ++ в base64, но он слишком велик для отображения в браузере.

tring res = base64_encode(buffer, raw_stride* h); //buffer contains my bitmap

Я обнаружил, что BitmapSource использовал "CachedBitmap", но я не могу понять, как он рассчитывается ...

1 Ответ

0 голосов
/ 13 марта 2019

Решил мою проблему с помощью LodePNG.

byte* buffer = { ... }
string res;
std::vector<unsigned char> png;
unsigned error = lodepng::encode(png, buffer, w, h);
res = base64_encode(&png[0], png.size());
...