如何在C#和.NET 3.5中减小图像的大小?

Vac*_*ano 10 c# compact-framework image-manipulation image .net-3.5

我有一个屏幕截图,我在我的移动应用程序中.在磁盘上保存为png时,屏幕截图大约需要32 KB.

我将这些发送到中央SQL Server,32 KB太大,我需要存储该屏幕截图(每天大约2500次).

有什么样的诡计我可以做到让它保存更小?

这是我现在使用的代码,用于将其从Bitmap字节(发送到服务器进行存储):

MemoryStream stream = new MemoryStream();
 _signatureImage.Save(stream, ImageFormat.Png);
 return stream.ToArray();
Run Code Online (Sandbox Code Playgroud)

_signatureImage是一个Bitmap并且是有问题的屏幕截图.

以下是我正在保存的屏幕截图示例:

屏幕截图

想到的东西(但我不知道怎么做):

  1. 减少图像的实际高度和宽度(但希望以一种不会扭曲它的方式).
  2. 将其更改为黑白图像(不确定我是否会看到任何真正的空间节省)
  3. 压缩它(我不喜欢这个,因为它不能从数据库中读取).

注意,这一切都必须以编程方式完成,并且不能花费很长时间,因此复杂的图像处理已经完成.

谢谢你的帮助.

pat*_*rtj 10

    private static Image ResizeImage(int newSize, Image originalImage)
    {
        if (originalImage.Width <= newSize)
            newSize = originalImage.Width;

        var newHeight = originalImage.Height * newSize / originalImage.Width;

        if (newHeight > newSize)
        {
            // Resize with height instead
            newSize = originalImage.Width * newSize / originalImage.Height;
            newHeight = newSize;
        }

        return originalImage.GetThumbnailImage(newSize, newHeight, null, IntPtr.Zero);
    }
Run Code Online (Sandbox Code Playgroud)

这应该适用于您的Bitmap对象Type并调整高度或宽度,具体取决于哪个适合您的图像尺寸.它还将保持规模.

编辑:

您可以创建一个新的Bitmap对象,并将原始图像调整为该Bitmap对象.

Bitmap b = new Bitmap(newWidth, newHeight);
Graphics g = Graphics.FromImage((Image)b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;

g.DrawImage(imgToResize, 0, 0, newWidth, newHeight);
g.Dispose();

return (Image)b;
Run Code Online (Sandbox Code Playgroud)

我没有安装Compact Framework,但似乎这应该对你有用.