Я разрабатываю приложение на C # / UWP, которое открывает изображения, модифицирует их и сохраняет их. Приложение поддерживает несколько расширений файлов, и у меня есть проблема со всеми форматами файлов. В этом случае я использую тестовые изображения PNG и JPG в качестве примера.
Я использую класс BitmapDecoder в приложении UWP для открытия изображений с использованием следующего кода.
using (IRandomAccessStreamWithContentType imageFileStream = await imageStorageFile.OpenReadAsync())
{
BitmapDecoder bitmapDecoder = await BitmapDecoder.CreateAsync(imageFileStream);
PixelDataProvider pixelDataProvider = await bitmapDecoder.GetPixelDataAsync();
pixelData = pixelDataProvider.DetachPixelData();
encoderGuid = bitmapDecoder.DecoderInformation.CodecId;
}
Кодировщик возвращает Guid, как ‘9456a480-e88b-43ea-9e73-0b2d9b71b1ca’ для тестового изображения PNG, и я подозревал, что его можно было напрямую использовать в классе Encryptor, который я использую для записи. Моя программа изменяет изображение и сохраняет его в другое изображение в том же формате, для которого я использую BitmapEncoder.
using (IRandomAccessStream imageFileStream = await imageStorageFile.OpenAsync(FileAccessMode.ReadWrite))
{
BitmapEncoder bitmapEncoder = await BitmapEncoder.CreateAsync(encoderGuid, imageFileStream);
bitmapEncoder.SetPixelData(bitmapPixelFormat, bitmapAlphaMode, pixelWidth, pixelHeight, dpiX, dpiY, pixelData);
await bitmapEncoder.FlushAsync();
}
На этом этапе в методе BitmapEncoder.CreateAsync появляется ошибка «Указанное преобразование недопустимо», поскольку оно не принимает Guid, ранее созданный декодером.
Guid не соответствует ни одному из статических идентификаторов кодировщика.
BitmapEncoder.PngEncoderId
BitmapEncoder.JpegEncoderId
BitmapEncoder.JpegXREncoderId
BitmapEncoder.TiffEncoderId
BitmapEncoder.BmpEncoderId
BitmapEncoder.GifEncoderId
Я могу ввести эти статические Guid без исключения «Указанный приведен неверный». Хотя, когда я использовал BitmapEncoder.PngEncoderId, программа сохранила изображение в формате png с шумом только пикселя.
Есть идеи, что я делаю не так, пожалуйста? Любая помощь приветствуется. Спасибо!