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

标签 c# image .net-3.5 compact-framework image-manipulation

我有一张我在移动应用程序中拍摄的屏幕截图。当在磁盘上另存为 png 时,屏幕截图大约需要 32 KB。

我将这些发送到中央 SQL Server,32 KB 对于我需要存储该屏幕截图的次数来说太大了(每天大约 2500 次)。

有什么技巧可以让我节省更多的钱吗?

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

MemoryStream stream = new MemoryStream();
 _signatureImage.Save(stream, ImageFormat.Png);
 return stream.ToArray();

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

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

Screen Shot Image

突然想到的事情(但我不知道该怎么做):

  1. 减小图像的实际高度和宽度(但希望不会扭曲图像)。
  2. 将其更改为黑白图像(不确定我是否会因此看到任何真正的空间节省)
  3. 压缩得更多(我不太喜欢这样,因为这样它就无法从数据库中读取)。

请注意,这一切都必须以编程方式完成,并且不能花费很长时间,因此复杂的图像操作已经过时了。

感谢您的帮助。

最佳答案

    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);
    }

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

编辑:

您可以创建一个新的 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;

我没有安装 Compact Framework,但它似乎适合您。

关于c# - 如何在 C# 和 .NET 3.5 中减小图像的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3885395/

相关文章:

c# - 对 List<Socket> 的多次访问

c# - Visual Studio 2010 在分析报告后进行分析时崩溃

javascript - 为什么javascript是: URIs allowed in the src attribute of <img> tags?

c# - 保持 LinqToSQL 与数据库同步

c# - 是否有任何原因无法在此代码块的 List<T> 中找到现有项目?

c# - 为什么我的表单在验证后不回发?

c# - c#中的批处理

c# - 从 FHIR 模式生成 C# 类

java - 无法调整word文档中的图像大小

android - 高分辨率图像 - OutOfMemoryError