分享自动生成对联小工具的Python开发过程

前段时间用Python写了个生成对联的小程序,程序主要功能就是可以生成对联图片,用指定的背景根据输入的对联内容在程序目录中生成对联图片。生成的图片文件如下所示:

 

 打开一幅生成的图片可以看到如下效果:

 下面分享一下程序编写过程,首先需要将文字和背景图片合成为一个单字+背景的图像,然后根据

横批、上联、下联,按横向或者纵向拼接,最后将拼好的图片保存成文件。功能基本上实现了,但是代码写得比较乱,实在没法看,也懒得花时间整理,就不在这里分享了。

 

CPaintDC dc(this); CWnd * pWnd = dc.GetWindow(); CWnd * item1; item1=this->GetDlgItem(IDC_STATIC1); CRect * rect=new CRect; item1->GetWindowRect(rect); POINT a,b; a=rect->TopLeft(); b=rect->BottomRight(); ::ScreenToClient(this->m_hWnd,&a); ::ScreenToClient(this->m_hWnd,&b); CDC memDC; CBitmap cBitmap; BITMAP bitmap; cBitmap.LoadBitmap(IDB_BITMAP2); //通过资源标识加载图片 // HBITMAP hbmp=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),"F:\\MFC\\duilian2\\res\\下联.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); //通过文件路径加载图片 // cBitmap.Attach(hbmp); cBitmap.GetBitmap(&bitmap); maxh=bitmap.bmHeight; memDC.CreateCompatibleDC(&dc); memDC.SelectObject(&cBitmap); dc.BitBlt(a.x,a.y,bitmap.bmWidth,bitmap.bmHeight,&memDC,0,0,SRCCOPY); //////////////////////////////////////////////////////////////////////////// CRgn rgn,temprgn; rgn.CreateRectRgn(a.x,a.y,a.x+bitmap.bmWidth+5,a.y+h+4); item1=this->GetDlgItem(IDC_STATIC2); item1->GetWindowRect(rect); a=rect->TopLeft(); b=rect->BottomRight(); ::ScreenToClient(this->m_hWnd,&a); ::ScreenToClient(this->m_hWnd,&b); cBitmap.DeleteObject(); cBitmap.LoadBitmap(IDB_BITMAP1); cBitmap.GetBitmap(&bitmap); // memDC.CreateCompatibleDC(&dc); memDC.SelectObject(&cBitmap); dc.BitBlt(a.x-1,a.y-2,bitmap.bmWidth,bitmap.bmHeight,&memDC,0,0,SRCCOPY); temprgn.CreateRectRgn(a.x,a.y,a.x+bitmap.bmWidth+4,a.y+h+4); rgn.CombineRgn(&rgn,&temprgn,RGN_OR); /////////////////////////////////////////////////////////////////////////////////////// item1=this->GetDlgItem(IDC_STATIC3); item1->GetWindowRect(rect); a=rect->TopLeft(); b=rect->BottomRight(); ::ScreenToClient(this->m_hWnd,&a); ::ScreenToClient(this->m_hWnd,&b); cBitmap.DeleteObject(); cBitmap.LoadBitmap(IDB_BITMAP3); cBitmap.GetBitmap(&bitmap); maxw=bitmap.bmWidth; // memDC.CreateCompatibleDC(&dc); memDC.SelectObject(&cBitmap); dc.BitBlt(b.x-2-bitmap.bmWidth,a.y-2,bitmap.bmWidth,bitmap.bmHeight,&memDC,0,0,SRCCOPY); temprgn.DeleteObject(); temprgn.CreateRectRgn(b.x-w,a.y,b.x,a.y+bitmap.bmHeight); rgn.CombineRgn(&rgn,&temprgn,RGN_OR); /////////////////////////////////////////////////////////////////////////////// pWnd->SetWindowRgn(rgn,true); // pWnd->SetForegroundWindow(); rgn.DeleteObject(); temprgn.DeleteObject(); SetTimer(0,15,NULL); //CDialog::OnPaint();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

urhero

一切源于您的鼓励与支持,谢谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值