首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

现有一张bmp图片,VC中怎么截取图片的指定的一部分并保存

2012-01-10 
现有一张bmp图片,VC中如何截取图片的指定的一部分并保存如题:我是想截取这张图片的某一指定部分,然后保存

现有一张bmp图片,VC中如何截取图片的指定的一部分并保存
如题:我是想截取这张图片的某一指定部分,然后保存下来。

[解决办法]
可以采用gdi+
通过 
Bitmap* pbitmap = ::new Bitmap(...);//需要的size
Graphics gph(pbitmap);
gph->DrawImage(...);
...
pbitmap->save(...);
::delete pbitmap

具体可以自己查一下
[解决办法]
1、读取源图像,得到这张图像的数据。
2、按照你要生成的图像的大小,创建1个新的图像信息头,分配内存空间,创建空白图像数据
3、将你要截取的部分赋值到新的图像内存区
4、写文件。
整体上是这个思路,有很多实现方法,如果只是读写位图文件,API就可以很方便的做。如果需要读取保存更多图片格式,可以借助CxImage和OpenCv这些库

[解决办法]
BMP图像的格式很简单。
按照顺序为:位图文件头->位图信息头->调色板信息->颜色信息。
位图文件结构头:
typedef struct tagBITMAPFILEHEADER { 
WORD bfType; 
DWORD bfSize; 
WORD bfReserved1; 
WORD bfReserved2; 
DWORD bfOffBits; 
} BITMAPFILEHEADER, *PBITMAPFILEHEADER; 
位图信息头结构为:
typedef struct tagBITMAPINFOHEADER{
DWORD biSize; // 位图信息头大小 为40
LONG biWidth; // 像素上的位图宽度
LONG biHeight; // 像素上的位图高度
WORD biPlanes; 
WORD biBitCount; // 多少位表示一个像素颜色
DWORD biCompression; 
DWORD biSizeImage; // 位图中描述像素颜色的数据的大小,这个是以4个字节为单位的,不足是0补
LONG biXPelsPerMeter; 
LONG biYPelsPerMeter; 
DWORD biClrUsed; // 多少个颜色使用了
DWORD biClrImportant;// 多少个颜色是重要的
} BITMAPINFOHEADER, *PBITMAPINFOHEADER; 
位图信息按照位图的色的不同而不同,例如24位时,颜色信息中,三个字节表示的是一个位图像素点的RGB值。


完全可以解析BMP文件中的格式来获得像素点的值。

比如。你可以得到几个矩形范围类的像素点的值。然后重新根据这个矩形范围类的像素值重新构造一个BMP文件格式。
重新写入bmp文件头,bmp信息头,bmp调色板,bmp像素信息(这个信息是你要获取的区域内的像素信息,可以直接获取原图中的像素的值获得)。bmp文件头,bmp信息头可以根据实际情况更改,比如说,位图的宽度,位图的高度,位图像素信息的大小,这些都可以直接计算出来。

注意:bmp是按照图像从下向上,按行扫描得到的图像的,而且为像素信息中,如果一行中描述该行的所有像素信息的字节数不是4的整数倍时,要用0补齐,凑出4的整数倍。

网上很多BMP图像的解析,解析出来了就不难做了。祝你成功。

热点排行