У меня есть приложение ASP.NET MVC 2, предназначенное для .NET 4, которое должно иметь возможность изменять размеры изображений на лету и записывать их в ответ.
У меня есть код, который делает это, и это работает. Я использую System.Drawing.dll.
Однако я хочу улучшить свой код, чтобы не только изменять размер изображения, но и уменьшать его с 24 бит / с до 4-битного оттенка серого. Я не могу, на всю жизнь, найти код, как это сделать с System.Drawing.dll.
Но я нашел кучу вещей из WPF. Это мой рабочий / пример кода (работает в LinqPad).
// Load the original 24 bit image
var bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.UriSource = new Uri(@"C:\Temp\Resized\18_appa2_015.png", UriKind.Absolute);
//bitmapImage.DecodePixelWidth = 600;
bitmapImage.EndInit();
// Create the destination image
var formatConvertedBitmap = new FormatConvertedBitmap();
formatConvertedBitmap.BeginInit();
formatConvertedBitmap.Source = bitmapImage;
formatConvertedBitmap.DestinationFormat = PixelFormats.Gray4;
formatConvertedBitmap.EndInit();
// Encode and dump the image to disk
var encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(formatConvertedBitmap));
using (var fileStream = File.Create(@"C:\Temp\Resized\18_appa2_015_s2.png"))
{
encoder.Save(fileStream);
}
Он использует System.Xaml.dll, WindowsBase.dll, PresentationCore.dll и PresentationFramework.dll. Используются следующие пространства имен: System.Windows.Controls, System.Windows.Media и System.Windows.Media.Imaging.
Есть ли проблемы с использованием этих пространств имен в моем веб-приложении? Это не кажется правильным.
Если кто-нибудь знает, как уменьшить битовую глубину без всего этого WPF (что я едва понимаю, кстати), я был бы рад увидеть это тоже.