如何在一个视图中,贴两幅位图,然后把这两幅位图存为一副位图?如何平滑处理交界处?我急呀。在线等

wlzqi 2004-08-07 09:29:47
第一个问题如题,我在这里搜索过,可是按搜索出来的帖子做,贴出的是一个大黑框。无奈再发贴求救。
第二个问题是怎么样把在视图中贴的这两幅位图的重合部分平滑的过渡,就让两幅位图的交界处看起来很自然呢。

谢谢
...全文
48 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wlzqi 2004-08-07
真是万分感谢,楼上2位!!!!
不知对第二个问题,你们有什么方法没?
回复
howtotell 2004-08-07
先把两副位图合并,然后再把合并的位图显示到视图中:
void CDrawPicture::CombinePic(CString pic1,
CString pic2,
CString picDes)
{
///////////////////////////////////////
//合并图像
BITMAPFILEHEADER bfh;
BITMAPINFO bih;

CFile fp;
fp.Open(pic1,CFile::modeRead);
fp.Read(&bfh,sizeof(bfh));
fp.Read(&bih,sizeof(bih));

RGBTRIPLE *rgb;
rgb = new RGBTRIPLE[bih.bmiHeader.biWidth*bih.bmiHeader.biHeight];

if(fp.GetLength()>64*1024)
{
fp.ReadHuge(rgb,bih.bmiHeader.biWidth*bih.bmiHeader.biHeight*3);
}
else
{
fp.ReadHuge(rgb,bih.bmiHeader.biWidth*bih.bmiHeader.biHeight);
}

fp.Close();

fp.Open(pic2,CFile::modeRead);
fp.Read(&bfh,sizeof(bfh));
fp.Read(&bih,sizeof(bih));

RGBTRIPLE *rgb2;
rgb2 = new RGBTRIPLE[bih.bmiHeader.biWidth*bih.bmiHeader.biHeight];

if(fp.GetLength()>64*1024)
{
fp.ReadHuge(rgb2,bih.bmiHeader.biWidth*bih.bmiHeader.biHeight*3);
}
else
{
fp.ReadHuge(rgb2,bih.bmiHeader.biWidth*bih.bmiHeader.biHeight);
}
fp.Close();

bih.bmiHeader.biHeight*=2;
bih.bmiHeader.biSizeImage*=2;

fp.Open(picDes,CFile::modeCreate|CFile::modeWrite);
fp.Write(&bfh,sizeof(bfh));
fp.Write(&bih,sizeof(bih));
fp.WriteHuge(rgb,bih.bmiHeader.biWidth*bih.bmiHeader.biHeight*3/2);
fp.WriteHuge(rgb2,bih.bmiHeader.biWidth*bih.bmiHeader.biHeight*3/2);
fp.Close();

CDrawPicture draw;

CRect recDes;
pSPC->GetClientRect(recDes);
ShowBmp(pSPC->GetDC(),picDes,recDes);
m_strPicPath=picDes;
}
回复
Kudeet 2004-08-07
1
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);
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-08-07 09:29
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……