本篇文章给大家谈谈c语言bmp文件缩小,以及bmp文件大小计算C语言对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、BMP图片分析和显示 c语言 压缩,解压缩2、怎样把BMP的文件缩小在1K以内呀?3、如何减小BMP文件大小4、C语言中调用bmp图片时能否设置图片显示的大小与位置?最好有直接可以使用的函数!
BMP图片分析和显示 c语言 压缩,解压缩
bmp是一种简单的图片格式,但要解释清楚也不是件容易的事。
一个bmp文件可以分为4个部分,第一部分是文件信息,第二部分是图片信息,第三部分是调色板,第四部分就是图片的数据了。
第一部分主要是说,我就是bmp格式的文件,我的大小是多少,我的图片数据存在什么地方。
第二部分主要是说,我这张图片宽度和长度分别是多少,颜色深度有几位,有没有压缩等信息。
颜色深度8bit 4bit 1bit的意思是说,大自然存在无穷的颜色,但计算机的存储是有限的,我只能每个像素点保存1bit的信息,也就是说,我只能保存两种颜色的信息。如果每个像素点保存4bit的信息,我就可以保存16种颜色了。如果每个像素点保存8bit的信息,我就可以保存256种颜色了。由此可见bit越长可以保存的颜色种类就越多。
第三部分要根据第二部分的来表示的。上面说了如果颜色深度是8bit,就可以保存256种颜色了,但具体是哪种颜色呢,这就要靠第三部分调色板来告诉你了,根据不同的bit长度,调色板的长度也不同,比如1bit,此部分就是有两种颜色,4bit就是16种颜色,8bit就是256种颜色,16bit时就就不再告诉大家各种颜色是什么了,因为颜色种类太多了。这时这部分反而只有三个数据,分别告诉大家,三个颜色分别在一个16bit数据的具体位置。如果图像深度是24bit,这部分就没有了,因为计算机只能显示24Bit的颜色。
第四部分就是存储具体图像数据的地方了,这个地方告诉我们,图片中的每一个像素点的颜色是什么。但是对于8bit 4bit 1bit的图像,他存的只是索引,告诉我们这个地方的颜色就是调色板里的第几个颜色。对于24bit的颜色就是保存颜色的身。而16位的就比较复杂,要通过一些位移运算来确定具体是什么颜色。
具体代码,网上多的是。我就不提供了。
怎样把BMP的文件缩小在1K以内呀?
1.减小像素(这个不用说了哦)
2.降低位深(比如把24位的改成16位的、256色的等等,对色彩损失非常大)
3.没了,如果要最终的格式还是bmp的话,只有这两个方法,bmp是点对点的,完全不压缩,所以只能按上述两个办法来折腾
如何减小BMP文件大小
bmp属于无损的点对点图片,要减小空间,可以试试下面方法
1.转换格式,变成jpg(任何图片编辑软件都能实现,最简单的画图里面直接另存为jpg的图片就可以,属于有损压缩),或者png(ps输出成png里面可以实现无损压缩,算法为zip,但是效果没有jpg明显)
2.改变位深(24位的改成16位的或者更低–这样颜色丢失非常多)
3.改变像素 (降低像素,直接降低清晰度)
C语言中调用bmp图片时能否设置图片显示的大小与位置?最好有直接可以使用的函数!
1.使用MFC相关的控件或者用GDI+的类加载bmp图片大小实现缩放功能(比较简单),参考下面代码
//建立图形对象
Graphics mGraphics( dc.GetSafeHdc() );
//装入图像文件
Image img( L”./res/test.jpg”, TRUE );
//在指定区域pdestPoints显示图像
/*//根据背景大小按比例缩放
CRect rcClient;
GetClientRect( rcClient );
BOOL bWidth = rcClient.Width() / img.GetWidth() rcClient.Height() / img.GetHeight();
if ( bWidth )
{
mGraphics.DrawImage( img, 0, 0, rcClient.Width(), rcClient.Width() * img.GetHeight() / img.GetWidth() );
}
else
{
mGraphics.DrawImage(img, 0, 0, rcClient.Height() * img.GetWidth() / img.GetHeight(), rcClient.Height() );
}
2.自己实现
搜索双线性插值或者三线性插值算法,搞明白再写代码
关于c语言bmp文件缩小和bmp文件大小计算C语言的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。