2015-05-28 3 views
1

В настоящее время я переношу существующий проект C# из библиотеки .Net Framework 4.5 в переносимую библиотеку классов profile 111. Мне нужно сохранить и загрузить данные изображения в/из потока, используя формат PNG.Сохранить изображение как PNG в библиотеке портативных классов

Как вы, вероятно, знаете, в этом профиле не существует пространство имен System.Drawing, поэтому я не могу использовать класс Bitmap для этого, как и раньше. До сих пор мое веб-исследование не давало никаких «очевидных решений» для сжатия изображений в C#, когда System.Drawing недоступен.

В ответе на этот вопрос, пожалуйста, предположите, что предоставление различных версий платформы моей библиотеки с помощью простого интерфейса PCL не является вариантом в этом случае.

Как подойти к этому?

+1

Когда Googling я нашел чистую библиотеку PNG C#, * pngcs *, [здесь] (https://code.google.com/p/pngcs/). Это не PCL прямо сейчас, но он, похоже, не имеет никакой зависимости от Windows Forms или WPF, поэтому совсем не сложно превратить его в PCL. Стоит попробовать? ** UPDATE ** Недавно проект был перенесен на [Github] (https://github.com/leonbloy/pngcs). –

+1

Мне просто нужно было проверить, и ** да **, проект легко переносится в профиль PCL 111, для обхода нескольких неподдерживаемых вызовов метода требуется небольшая работа. –

+0

@AndersGustafsson Эта библиотека может быть действительно вариантом - спасибо! :) – Adam

ответ

1

Портативная библиотека классов не поддерживает элементы изображения или пользовательского интерфейса по дизайну, поэтому вашей проблемы, вероятно, будет довольно сложно решить, не извлекая некоторые функции в минимальную платформозависимую библиотеку. Из некоторых поисков в Интернете кажется, что другие разработчики, представленные с вашей же проблемой, прибегают к разгрузке работы с изображениями либо в веб-службе, либо в зависимости от платформы.

Конечно, вы всегда можете иметь дело с byte[] и катите свой собственный кодировщик/декодер PNG. Ура. Имейте в виду, существуют различные ароматы, доступные на основе различных «фильтров» и т.д.

ЗКС ссылка here утверждает, что узлы, доступные в рамках проекта портативного класса библиотеки являются:

mscorlib.dll 
System.dll 
System.Core.dll 
System.Xml.dll 
System.ComponentModel.Composition.dll 
System.Net.dll 
System.Runtime.Serialization.dll 
System.ServiceModel.dll 
System.Xml.Serialization.dll 
System.Windows.dll (from Silverlight) 

Это последняя сборка является единственным один, о котором я знаю, имеет любую функциональность, связанную с изображениями. Он содержит класс System.Windows.Controls.Image, который поддерживает отображение изображения в форматах файлов JPEG или PNG. Разумеется, оговорка (на основе матрицы, содержащейся в вышеупомянутой ссылке) состоит в том, что эта сборка Silverlight в формате System.Windows.dll доступна только в PCL при ориентации на платформу Silverlight и/или на платформу Windows Phone 7. Он не будет доступен для более общей платформы .NET Framework 4 или платформы Xbox 360.

Если вы в конечном итоге вынуждены идти с минимальной платформозависимой библиотекой, инфраструктура WPF имеет пространство имен System.Windows.Media.Imaging с расширенной поддержкой кодирования/декодирования формата изображения (включая формат PNG).