Сохранить массив символов в формате JPG для приложения C ++ для Магазина Windows

Учитывая следующее

  • Необработанные данные растрового изображения в массиве символов
  • Ширина и высота изображения
  • Дорожка wzAppDataDirectory в std :: wstring, сгенерированный с использованием следующего кода

// Get a good path.
wchar_t wzAppDataDirectory[MAX_PATH];
wcscpy_s( wzAppDataDirectory, MAX_PATH, Windows::Storage::ApplicationData::Current->LocalFolder->Path->Data() );
wcscat_s( wzAppDataDirectory, MAX_PATH, (std::wstring(L"\\") + fileName).c_str() );

Как мы можем сохранить изображение в формате JPG? (Включите кодировку, а также массив символов в виде необработанного растрового изображения)

Пример кода очень ценится.

0

Решение

Вам нужно будет использовать библиотеку для кодирования JPEG. Некоторые возможности Jpeglib независимой группы JPEG, stb_image, или же DevIL.

0

Другие решения

Это пример кода, который я получил от моего друга.

Он использует структуру данных OpenCV Mat. Обратите внимание, что вы должны обеспечить массив данных без знака в cv::Mat в непрерывной форме. cv::cvtColor сделает свое дело (или, cv::Mat.clone).

Обратите внимание, не используйте OpenCV imwrite, Как и в настоящее время, imwrite не проходит сертификацию Windows Store. Он использует несколько API, что запрещено в WinRT.

void SaveMatAsJPG(const cv::Mat& mat, const std::wstring fileName)
{
cv::Mat tempMat;
cv::cvtColor(mat, tempMat, CV_BGR2BGRA);

Platform::String^ pathName = ref new Platform::String(fileName.c_str());

task<StorageFile^>(ApplicationData::Current->LocalFolder->CreateFileAsync(pathName, CreationCollisionOption::ReplaceExisting)).
then([=](StorageFile^ file)
{
return file->OpenAsync(FileAccessMode::ReadWrite);
}).
then([=](IRandomAccessStream^ stream)
{
return BitmapEncoder::CreateAsync(BitmapEncoder::JpegEncoderId, stream);
}).
then([=](BitmapEncoder^ encoder)
{
const Platform::Array<unsigned char>^ pixels = ref new Platform::Array<unsigned char>(tempMat.data, tempMat.total() * tempMat.channels());
encoder->SetPixelData(BitmapPixelFormat::Bgra8, BitmapAlphaMode::Ignore, tempMat.cols , tempMat.rows, 96.0, 96.0, pixels);
encoder->FlushAsync();
});
}
0

По вопросам рекламы [email protected]