合成图片问题

billyshay 2003-08-22 03:39:33
本人需要完成如下功能:
在View中平铺了一张底图,然后再在View中画线、贴图,如何将这些线、贴的图以及底图合成一幅图片??
请各位高手帮个忙,谢谢了!!
...全文
26 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaoyoujun 2003-08-27
  • 打赏
  • 举报
回复
给我也来一份吧,我需要它,互相学习吧
qq :16748096
email: gaoyoujun7777@163.com
mct1025 2003-08-26
  • 打赏
  • 举报
回复
to billyshay(飞鱼)
是的,压缩效果的确不是很好,用的库不太好,有明显失真

你说的ImageLoad.dll是不是这个?
http://www.91code.net/source/jpeg/index.htm
hxnh 2003-08-26
  • 打赏
  • 举报
回复
楼上的仁兄,能否给我也发一份源代码,我的邮箱是ycf_home@sina.com.cn
多谢了
billyshay 2003-08-25
  • 打赏
  • 举报
回复
非常感谢个位仁兄!!
我能保存成BMP文件了,但目前还有一个问题:我将保存成的BMP文件用ImageLoad.dll 转化成Jpg文件,总是失败,而用ACDSee 的“另存”方式是可以转化的;此外用ImageLoad.dll 转化由"画图"生成的BMP文件 则没问题。其中BMP文件存在的差别是biBitCount 不一样,我存的图片是32,而用“画图”生成的文件则是24。

我采用 mct1025(macuntao) 的方式是可以的,不过好像压缩效果不是很好,我想用ImageLoad.dll来实现

我如何能解决这个问题呢? 还请帮帮忙————谢了
wrcluomo 2003-08-22
  • 打赏
  • 举报
回复
dwSourceBitsSize = lpSrcDIB->bmiHeader.biHeight *WIDTHBYTES(((LPBITMAPINFOHEADER)lpDIB)->biWidth * ((LPBITMAPINFOHEADER)lpDIB)->biPlanes * ((LPBITMAPINFOHEADER)lpDIB)->biBitCount);
memcpy( ::FindDIBBits(lpDIB),m_lpSourceBits,dwSourceBitsSize);
再把这两句加上就完整了。参数在你程序中不对的你替换一下。
基本思路就在这儿,就是COPY来COPY去的。
mct1025 2003-08-22
  • 打赏
  • 举报
回复
已经发送
wrcluomo 2003-08-22
  • 打赏
  • 举报
回复
当然可以了。我给你找一人完整的。等会儿。
billyshay 2003-08-22
  • 打赏
  • 举报
回复
谢谢两位高手:我的邮箱是billy_shay@sina.com
楼上的兄弟的方法作完之后就可以保存成一张bmp文件了吗??我试试看吧!
wrcluomo 2003-08-22
  • 打赏
  • 举报
回复
HDC hDC = NULL, hSourceDC;
HBITMAP hSourceBitmap;
DWORD dwSourceBitsSize;

LPBITMAPINFO lpSrcDIB = (LPBITMAPINFO)lpDIB;
hDC = ::GetDC(NULL);
hSourceBitmap = CreateDIBSection( hDC, lpSrcDIB, 0, &m_lpSourceBits, NULL, 0 );
hSourceDC = CreateCompatibleDC( hDC );
dwSourceBitsSize = lpSrcDIB->bmiHeader.biHeight *WIDTHBYTES(((LPBITMAPINFOHEADER)lpDIB)->biWidth * ((LPBITMAPINFOHEADER)lpDIB)->biPlanes * ((LPBITMAPINFOHEADER)lpDIB)->biBitCount);
memcpy( m_lpSourceBits, ::FindDIBBits(lpDIB), dwSourceBitsSize );
m_pMemDC = new CDC;
m_pMemDC->CreateCompatibleDC(NULL);
m_hOldSourceBitmap=(HBITMAP) m_pMemDC->SelectObject(hSourceBitmap);
DeleteDC( hSourceDC );
::ReleaseDC( NULL,hDC );
int OldBKMode=m_pMemDC->SetBkMode(TRANSPARENT);
CPen pen,*OldPen;
pen.CreatePen(0,PenWidth,PenColor);
OldPen=(CPen *)m_pMemDC->SelectObject(pen);
COLORREF OldColor=m_pMemDC->SetTextColor(PenColor);

m_pMemDC->MoveTo(RulerBeginX,RulerBeginY);
m_pMemDC->LineTo(RulerEndX,RulerEndY );
我都是这么用。画完再COPY回来,原来的数据区就有线了。
mct1025 2003-08-22
  • 打赏
  • 举报
回复
留个邮箱,我发给你

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧