【问题标题】:Picture is 10x bigger in datastorage after manipulation操作后图片在数据存储中大 10 倍
【发布时间】:2014-10-07 15:16:10
【问题描述】:

我正在尝试检测图片中的一些绿色文本,然后对文本下的像素进行操作。

为此,我加载了地图图片(不含文字)和经过处理的图片。在矩阵中移动检查 RGB 值,工作完成后,我再次将位图 sn 保存为 .jpg(使用新名称)。

问题是:加载的图片存储大小约为3mb。新保存的图片有 30mb。

相同的宽度/高度和 DPI。只是颜色深度高 1 个字节(24 位 -> 32 位)。 无论如何,这不可能是 10 倍的因素。

有人知道会发生什么吗?

或者更有趣的事情:我怎样才能用 3mb 保存新的位图?

感谢您的回答, -LD-

代码:

// no text, picture shows a map
Bitmap MapBitmap = new Bitmap("C:\\Users\\LD\\Desktop\\Karte\\Map.jpg");    
// with green text
Bitmap OriginalBitmap = new Bitmap("C:\\Users\\LD\\Desktop\\Karte\\Original.jpg");  
// manipulated text
Bitmap NeueBitmap = new Bitmap(OriginalBitmap.Width,OriginalBitmap.Height); 

// move throug matix
for (int x = 0; x < OriginalBitmap.Width; x++)
{
   for (int y = 0; y < OriginalBitmap.Height; y++)
   {
      progressBar1.Value = x * 10000 / OriginalBitmap.Width;  // show progress
      Color OriginalColor = OriginalBitmap.GetPixel(x, y);
      int r = OriginalColor.R;    // for later use
      int g = OriginalColor.G;
      int b = OriginalColor.B;
      Color MapColor = MapBitmap.GetPixel(x, y);
      int R = MapColor.R;         // for later use
      int G = MapColor.G;
      int B = MapColor.B;

      if ((g/1.5)  > r && (g/1.5)  > b)
      {   // check the green-value compared to the others
         Color NeueColor = Color.FromArgb((R + 20), (G + 20), (B + 20));
         NeueBitmap.SetPixel(x, y, NeueColor);
      }
      else
      {
         Color NeueColor = Color.FromArgb(R, G, B);
         NeueBitmap.SetPixel(x, y, NeueColor);
      }
   }
}
NeueBitmap.Save("C:\\Users\\LD\\Desktop\\Karte\\Neu2.jpg");

【问题讨论】:

    标签: c# bitmap save size jpeg


    【解决方案1】:

    在适当的NeueBitmap.Save()重载中指定格式;就目前而言,它将默认为带有 .JPG 扩展名的 .PNG。

    NeueBitmap.Save("C:\\Users\\LD\\Desktop\\Karte\\Neu2.jpg", ImageFormat.Jpeg);
    

    【讨论】:

    • 我不是通过在文件路径中添加特定格式来做到这一点的吗? >> NeueBitmap.Save("C:\\Users\\LD\\Desktop\\Karte\\Neu2.jpg") 这应该将其保存为 .jpg 还是我错了?而且我加载的图片具有相同的扩展名(在开始时使用正确的扩展名有一些问题)...
    • 指定格式如上编辑,.Net不会看字符串文件名来确定你想要的格式。
    • 哦等等。我找到了你的意思。 NeueBitmap.Save("C:\\Users\\LD\\Desktop\\Karte\\Neu3.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);你是对的。结果只有 1.8mb 大小。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 2012-05-11
    • 2011-07-02
    • 1970-01-01
    • 2021-01-13
    • 2011-04-18
    • 1970-01-01
    相关资源
    最近更新 更多