高手指导!求BMP图像合并算法!该怎么处理
高手指导!求BMP图像合并算法!
例,有两张同为256色的bmp,长宽相等都为400x300,现需要合并成一张大图,在水平方向上并列,即合并成一张800x300的bmp,请高手指点一下思路,或者给些示例代码!谢谢!
------解决方案--------------------
生成一张800x300的大图,然后把两张800x300图像中的对应像素数据copy到大图里
------解决方案--------------------
256首先要确定调色板一样(不一样的话也要保证两幅图用的256种颜色相同,否则只能用真彩色了,然后转化一幅图),然后先写好文件头,拷贝第一幅的400(一行)个字节,拷贝第二幅的400(一行)个字节,再拷贝第一幅的400(一行)个字节,拷贝第二幅的400(一行)个字节,。。。注意bmp的4字节对齐,保存就好了。
------解决方案--------------------
你要是用bcb的话,代码不会超过10行!使用TBitmap或者TGraphic
------解决方案--------------------
为何不使用GDI+?
------解决方案--------------------
bmp图片合并
BOOL CombinePic(const WCHAR *format, const CString &strDst, const CString &strPic1, \
const CString &strPic2)
{
BOOL bCombine = false;
int nRet = 0;
CLSID clsid;
nRet = GetEncoderClsid(format,&clsid);
if (nRet> =0)
{
USES_CONVERSION;
Bitmap bmp1(A2W(strPic1));
Bitmap bmp2(A2W(strPic2));
int nWidth = 0, nHeight = 0;
nWidth = bmp1.GetWidth(); //假设两图片大小同
nHeight = bmp1.GetHeight();
Bitmap bmpCombine(2*nWidth,nHeight); //高不变,宽*2,水平合并
Graphics * pG = NULL;
pG = Graphics::FromImage(&bmpCombine);
if (pG!=NULL)
{
pG-> DrawImage(&bmp1,0,0);
pG-> DrawImage(&bmp2,nWidth,0);
bmpCombine.Save(A2W(strDst),&clsid,NULL);
}
}
return bCombine;
}
------解决方案--------------------
先创建一个800×300的DIB,然后CreateDC把这个DIB选进去。
之后使用BitBlt把那两幅400×300的图按位置画上去就可以了。
例,有两张同为256色的bmp,长宽相等都为400x300,现需要合并成一张大图,在水平方向上并列,即合并成一张800x300的bmp,请高手指点一下思路,或者给些示例代码!谢谢!
------解决方案--------------------
生成一张800x300的大图,然后把两张800x300图像中的对应像素数据copy到大图里
------解决方案--------------------
256首先要确定调色板一样(不一样的话也要保证两幅图用的256种颜色相同,否则只能用真彩色了,然后转化一幅图),然后先写好文件头,拷贝第一幅的400(一行)个字节,拷贝第二幅的400(一行)个字节,再拷贝第一幅的400(一行)个字节,拷贝第二幅的400(一行)个字节,。。。注意bmp的4字节对齐,保存就好了。
------解决方案--------------------
你要是用bcb的话,代码不会超过10行!使用TBitmap或者TGraphic
------解决方案--------------------
为何不使用GDI+?
------解决方案--------------------
bmp图片合并
BOOL CombinePic(const WCHAR *format, const CString &strDst, const CString &strPic1, \
const CString &strPic2)
{
BOOL bCombine = false;
int nRet = 0;
CLSID clsid;
nRet = GetEncoderClsid(format,&clsid);
if (nRet> =0)
{
USES_CONVERSION;
Bitmap bmp1(A2W(strPic1));
Bitmap bmp2(A2W(strPic2));
int nWidth = 0, nHeight = 0;
nWidth = bmp1.GetWidth(); //假设两图片大小同
nHeight = bmp1.GetHeight();
Bitmap bmpCombine(2*nWidth,nHeight); //高不变,宽*2,水平合并
Graphics * pG = NULL;
pG = Graphics::FromImage(&bmpCombine);
if (pG!=NULL)
{
pG-> DrawImage(&bmp1,0,0);
pG-> DrawImage(&bmp2,nWidth,0);
bmpCombine.Save(A2W(strDst),&clsid,NULL);
}
}
return bCombine;
}
------解决方案--------------------
先创建一个800×300的DIB,然后CreateDC把这个DIB选进去。
之后使用BitBlt把那两幅400×300的图按位置画上去就可以了。