[求助帖]C#图像处理Bitmap会自动压缩图片吗?

yishijuan 2014-11-21 11:02:38
为什么导入大小为5.93 MB、位深度为24位、分辨率为1920*1080的bmp格式图片,导出的bmp格式图片分辨率不变,位深度增加到了32位,内存反而只有2.64 MB了呢?换一张图片导出的内存又不同。
不是bmp图片不会进行压缩吗?怎样得到没有压缩的位深度为24的图片?
以后的工作,我需要对图片的每个亚像素进行重新排列,请教C#图像处理大神推荐些C#中winfrom图像处理的书给零基础的我看看,目前处于没有指导自己瞎摸索的阶段,大部分时间都在浪费时间,没有进展。谢谢了!
附程序:
public Bitmap image1,image2;

private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog ofdlg = new OpenFileDialog();
ofdlg.Filter = "图文文件(*.bmp,*.gif,*.bmp,*.png)|*.bmp;*.gif;*.bmp;*.png";
if (ofdlg.ShowDialog() == DialogResult.OK)
{
image1 = new Bitmap(ofdlg.FileName);
}

}

private void button2_Click(object sender, EventArgs e)
{
image2 = new Bitmap(image1);
string str;
saveFileDialog1.Filter = "bmp文件(*.BMP)|*.BMP|All File(*.*)|*.*";
saveFileDialog1.ShowDialog();
if (saveFileDialog1.FileName != "")
{
str = saveFileDialog1.FileName;
image2.Save(str);
MessageBox.Show("保存成功!");
}
}
...全文
479 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
winnowc 2014-11-21
  • 打赏
  • 举报
回复
那个Save方法它不管你文件扩展名是什么,如果不加第二个参数定义格式ImageFormat.Bmp的话,都默认用png格式保存的,png是无损压缩的,所以变小了。 可以用下面的方式创建一个Format24bppRgb格式的bmp,把原图画上去,然后保存:

var bmp1 = Image.FromFile(@"e:\test.bmp");
var bmp2 = new Bitmap(bmp1.Width, bmp1.Height, PixelFormat.Format24bppRgb);
using (var g = Graphics.FromImage(bmp2))
    g.DrawImage(bmp1, 0, 0, bmp2.Width, bmp2.Height);
bmp2.Save(@"e:\test_2.bmp", ImageFormat.Bmp);
关于位图的处理,一般是用LockBits的方式拿到bmp的内存,自己unsafe方式处理内存中的图像数据比较快,可以参考这里,是一个图像比较的问题。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧