Масштабирование изображения вниз в C#

Я уменьшаю размер изображения до 8*8, чтобы вычислить средний хэш, чтобы найти похожие изображения с помощью C#. Я планирую использовать алгоритм Ланцоша, чтобы уменьшить размер изображения, так как он, кажется, дает хорошие результаты (чтение из интернета, а также алгоритм хеширования изображений Python использует то же самое). Не могли бы вы указать мне, где я могу найти алгоритм Ланцоша, реализованный в C#? Еще есть лучший способ сделать, чем Ланцош. Пожалуйста, помогите здесь.

Спасибо

2 ответа

Понятия не имею об алгоритме, но способ изменить размер изображения довольно прост:

    public static Bitmap ResizeImage(Image image, Int32 width, Int32 height)
    {
        Bitmap destImage = new Bitmap(width, height);
        using (Graphics graphics = Graphics.FromImage(destImage))
            graphics.DrawImage(image, new Rectangle(0, 0, width, height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel);
        return destImage;
    }

При этом вы можете загрузить исходное изображение, изменить его размер и сохранить изображение с измененным размером на диск:

public void ResizeImageFromPath(String imagePath, Int32 width, Int32 height, String savePath)
{
    if (savePath == null)
        savePath = imagePath;
    Byte[] bytes = File.ReadAllBytes(imagePath);
    using (MemoryStream stream = new MemoryStream(bytes))
    using (Bitmap image = new Bitmap(stream))
    using (Bitmap resized = ResizeImage(image, newwidth, newheight))
        resized.Save(savePath, ImageFormat.Png);
}
   using (Bitmap bitmap = (Bitmap)Image.FromFile("file.jpg"))
    {
        using (Bitmap newBitmap = new Bitmap(bitmap))
        {
            newBitmap.SetResolution(8, 8);
            newBitmap.Save("file_64.jpg", ImageFormat.Jpeg);
        }
    }

Вы можете изменить ImageFormat в Save-Функция, чтобы получить другую степень сжатия.

Другие вопросы по тегам