社区
图形处理/算法
帖子详情
怎么把2个一样大小bmp图片拼接合并生成一个bmp文件?谢谢!
MPU
2005-10-18 12:54:27
怎么把2个一样大小bmp图片拼接合并生成一个bmp文件?
把几百个8*8的bmp拼接成一个效率最好不太低.
谢谢!
...全文
1273
8
打赏
收藏
怎么把2个一样大小bmp图片拼接合并生成一个bmp文件?谢谢!
怎么把2个一样大小bmp图片拼接合并生成一个bmp文件? 把几百个8*8的bmp拼接成一个效率最好不太低. 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zkx2321
2005-10-18
打赏
举报
回复
好像DIB是从下向上一行一行存储的像素(显示时左上角的在存储的右下角),这样的话对于每个像素的坐标你就应该知道了。
这样的话合并两个DIB的关键就是像素的坐标了。
剩下的你应该知道怎么做了。
legendhui
2005-10-18
打赏
举报
回复
上面的引用自http://community.csdn.net/Expert/topic/4332/4332025.xml?temp=.2718317
legendhui
2005-10-18
打赏
举报
回复
void CUSBSENDDlg::OnSave()
{
// TODO: Add your control notification handler code here
CRect rect;
HBITMAP hBmp;
GetDlgItem(IDC_PIC)->GetWindowRect(rect);
ScreenToClient(rect);
CString strFilter="Bitmap Files (*.bmp)|*.bmp||";
CFileDialog dlg(FALSE,"bmp", NULL, OFN_HIDEREADONLY|OFN_EXPLORER, strFilter, NULL);
if (dlg.DoModal() == IDOK)
{
hBmp=GetSrcBit(rect);
SaveBmp(hBmp,dlg.GetPathName());
}
}
HBITMAP CUSBSENDDlg::GetSrcBit(CRect rect)
{
HDC hBufDC,hDC;
HBITMAP hBitmap, hBitTemp;
CClientDC dc(this);
hDC=dc.GetSafeHdc();
//创建设备上下文(HDC)
hBufDC = CreateCompatibleDC(NULL);
//创建HBITMAP
hBitmap = CreateCompatibleBitmap(hDC,rect.Width(),rect.Height());
hBitTemp = (HBITMAP) SelectObject(hBufDC, hBitmap);
//得到位图缓冲区
StretchBlt(hBufDC,0,0,rect.Width(),rect.Height(),
hDC,rect.left,rect.top,rect.Width(),rect.Height(),SRCCOPY);
//得到最终的位图信息
hBitmap = (HBITMAP) SelectObject(hBufDC, hBitTemp);
//释放内存
DeleteObject(hBitTemp);
::DeleteDC(hBufDC);
ReleaseDC(&dc);
return hBitmap;
}
BOOL CUSBSENDDlg::SaveBmp(HBITMAP hBitmap, CString FileName)
{
//设备描述表
HDC hDC;
//当前分辨率下每象素所占字节数
int iBits;
//位图中每象素所占字节数
WORD wBitCount;
//定义调色板大小, 位图中像素字节大小 ,位图文件大小 , 写入文件字节数
DWORD dwPaletteSize=0, dwBmBitsSize=0, dwDIBSize=0, dwWritten=0;
//位图属性结构
BITMAP Bitmap;
//位图文件头结构
BITMAPFILEHEADER bmfHdr;
//位图信息头结构
BITMAPINFOHEADER bi;
//指向位图信息头结构
LPBITMAPINFOHEADER lpbi;
//定义文件,分配内存句柄,调色板句柄
HANDLE fh,hDib,hOldPal=NULL;
// HANDLE hPal;
//计算位图文件每个像素所占字节数
hDC = CreateDC("DISPLAY", NULL, NULL, NULL);
iBits = GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES);
DeleteDC(hDC);
if (iBits <= 1) wBitCount = 1;
else if (iBits <= 4) wBitCount = 4;
else if (iBits <= 8) wBitCount = 8;
else wBitCount = 24;
GetObject(hBitmap, sizeof(Bitmap), (LPSTR)&Bitmap);
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = Bitmap.bmWidth;
bi.biHeight = Bitmap.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = wBitCount;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrImportant = 0;
bi.biClrUsed = 0;
dwBmBitsSize = ((Bitmap.bmWidth * wBitCount + 31) / 32) * 4 * Bitmap.bmHeight;
//为位图内容分配内存
hDib = GlobalAlloc(GHND,dwBmBitsSize + dwPaletteSize + sizeof(BITMAPINFOHEADER));
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);
*lpbi = bi;
// 处理调色板
// hPal = GetStockObject(DEFAULT_PALETTE);
// if (hPal)
// {
hDC = ::GetDC(NULL);
// hOldPal = ::SelectPalette(hDC, (HPALETTE)hPal, FALSE);
// RealizePalette(hDC);
// }
// 获取该调色板下新的像素值
GetDIBits(hDC, hBitmap, 0, (UINT) Bitmap.bmHeight, (LPSTR)lpbi + sizeof(BITMAPINFOHEADER)
+dwPaletteSize, (BITMAPINFO *)lpbi, DIB_RGB_COLORS);
//恢复调色板
// if (hOldPal)
// {
// ::SelectPalette(hDC, (HPALETTE)hOldPal, TRUE);
// RealizePalette(hDC);
// ::ReleaseDC(NULL, hDC);
// }
//创建位图文件
fh = CreateFile(FileName, GENERIC_WRITE,0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (fh == INVALID_HANDLE_VALUE) return FALSE;
// 设置位图文件头
bmfHdr.bfType = 0x4D42; // "BM"
dwDIBSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + dwPaletteSize + dwBmBitsSize;
bmfHdr.bfSize = dwDIBSize;
bmfHdr.bfReserved1 = 0;
bmfHdr.bfReserved2 = 0;
bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER) + dwPaletteSize;
// 写入位图文件头
WriteFile(fh, (LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);
// 写入位图文件其余内容
WriteFile(fh, (LPSTR)lpbi, dwDIBSize, &dwWritten, NULL);
//清除
GlobalUnlock(hDib);
GlobalFree(hDib);
CloseHandle(fh);
return TRUE;
}
MPU
2005-10-18
打赏
举报
回复
legendhui(秋天的叶子) 代码最后能不能把拼接好的图片存为文件。。
niying
2005-10-18
打赏
举报
回复
把两个位图数据结合起来,再修改调色板,位图像素大小,信息头等就行了!对位图熟就容易了!
legendhui
2005-10-18
打赏
举报
回复
CBitmap bitmap1,bitmap2;
CDC memDC,FinalDC;
HBITMAP hBitmap;
BITMAP Bmp1,Bmp2;
int x,y;
FinalDC.CreateCompatibleDC(NULL);
//初始化Bmp2
bitmap2.CreateBitmapIndirect(&Bmp2);
FinalDC.SelectObject(&bitmap2);
memDC.CreateCompatibleDC(NULL);
//处理第一副图
hBitmap = (HBITMAP)::LoadImage(NULL,"First.bmp",IMAGE_BITMAP,0,0,
LR_DEFAULTSIZE | LR_CREATEDIBSECTION | LR_LOADFROMFILE);
bitmap1.Attach(hBitmap);
bitmap1.GetBitmap(&Bmp1);
memDC.SelectObject(&bitmap1);
FinalDC.BitBlt(0,0,Bmp1.bmWidth,Bmp1.bmHeight ,&memDC,0,0,SRCCOPY);
x=Bmp1.bmWidth;
y=Bmp1.bmHeight
//处理第二副图
hBitmap = (HBITMAP)::LoadImage(NULL,"Second.bmp",IMAGE_BITMAP,0,0,
LR_DEFAULTSIZE | LR_CREATEDIBSECTION | LR_LOADFROMFILE);
bitmap1.Attach(hBitmap);
memDC.SelectObject(&bitmap1);
FinalDC.BitBlt(x,y,Bmp1.bmWidth,Bmp1.bmHeight ,&memDC,0,0,SRCCOPY);
saliors
2005-10-18
打赏
举报
回复
先创建一个Y坐标2倍大小的新bmp对象,然后把要合并的bmp图片的数据写进新bmp对象的数据区里就可以了。
y0z0
2005-10-18
打赏
举报
回复
你没说怎么拼呢,横排还是竖排?
Java将
图片
合并
为视频
Java将
图片
合并
为视频的项目
文件
下载依赖包是会比较慢,请在网络好的环境下载 依赖包下载好后,直接编译即可运行
淘淘
图片
批处理之星.exe
还可以让您轻松的将任意多的图像
文件
生成
一个
电子相册,并提供多达150种的动画显示效果,方便您欣赏自己的
图片
,并轻易实现与家人、朋友分享!支持多达11种(
BMP
,JPG,PNG,GIF,PSD,TIF等)的基本图像格式相互...
python使用百度OCR识别
图片
表格
在Python环境下,利用百度AI开放平台文字识别技术,对
图片
类表格进行识别,
生成
Excel
文件
,并下载到指定
文件
夹内。
图片
支持jpg/png/
bmp
格式,推荐使用JPG格式。 步骤: 1、注册并登录百度AI开放平台 ...
凌霄图像批处理专家4.2.1.288破解版
她还可以让您轻松的将任意多的图像
文件
生成
一个
电子相册,并提供多达150种的动画显示效果,方便您欣赏自己的
图片
,并轻易实现与家人、朋友分享!她支持多达11种(
BMP
,JPG,PNG,PSD,GIF等)的基本图像格式相互转换...
图片
批量裁剪器(精华版) v6.0.rar
5.定制
图片
大小
/尺寸(特色功能如能按指定的
文件
大小
压缩,比如压缩到120kb左右,仅压缩大图,小图忽略压缩等) 6.
图片
像素筛查(从海量
图片
中筛查出满足条件的
图片
供删除、移动、复制、更名等) 7.(
图片
)
文件
...
图形处理/算法
19,468
社区成员
50,698
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章