如何在DLL中将汉字串存成黑白的BMP图像?

Donald_fu 2005-03-20 08:33:56

我也写一个动态链接库,通过直接发指令控制打印机,而我要用的打印机没有硬件汉字库
所以打算在内存中画出位图,传给打印机打印。

如何在DLL中将汉字串存成黑白的BMP图像?
看到这样一段代码:
hp = CreateBitmap(bWide,bHeight,1,1,bBuf);
hDC = GetDC(hwndMain);
hMemDC = CreateCompatibleDC(hDC);
hMold = SelectObject(hMemDC,hp);
hFont = CreateFontIndirect(&lf);
hOld = SelectObject(hMemDC, hFont);
TextOut(hMemDC,xx,yy,tp,strlen(tp));
GetBitmapBits(hp, baOffset * bHeight,bBuf);
BitBlt(hDC,0,0,bWide,bHeight,hMemDC,0,0,SRCCOPY);
SelectObject(hMemDC, hOld);
SelectObject(hMemDC, hMold);
DeleteDC(hMemDC);
ReleaseDC(hwndMain,hDC);
DeleteObject(hFont);
DeleteObject(hp);

这样能实现吗?hDC = GetDC(hwndMain)中的hwndMain是窗体的句柄吧,我的dll中没有窗体怎么办?
...全文
88 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
0011411 2005-03-20
  • 打赏
  • 举报
回复
up
Kudeet 2005-03-20
  • 打赏
  • 举报
回复
CreateCompatibleDC(NULL); //
or
或者把桌面当做你的窗口CWnd *pWnd=GetDesktopWindow();
Varg 2005-03-20
  • 打赏
  • 举报
回复
我的生成字库的代码:
//创建位图数据
HDC hdc,hdcMem;
HBITMAP hBitMap = NULL;
CBitmap BitMap;

BYTE* pBits;
CBitmap* pOldmap;




hdc = ::GetDC(NULL);
hdcMem = CreateCompatibleDC(hdc);
hBitMap = CreateDIBSection(hdcMem,lpbmih,DIB_RGB_COLORS,(LPVOID*)&pBits,NULL,0);
BitMap.Attach(hBitMap);
MemDC.Attach(hdcMem);
pOldmap = MemDC.SelectObject(&BitMap);
CFont* def_font = MemDC.SelectObject(&font);
MemDC.FillSolidRect(0,0,16,16,RGB(255,255,255));//b=55;

MemDC.SetTextColor(fontcolor);
//MemDC.SetBkMode(TRANSPARENT);
//MemDC.TextOut(m_xedit,m_yedit,strchar);
MemDC.DrawText(strchar,&rect,DT_CENTER);


CFile file;

BYTE pReversed[128];
ReverseCopy(pReversed,pBits);


unsigned long len = 141;

BYTE pPacked[141];
compress2(pPacked,&len,pReversed,128,8);
if(file.Open(m_Path+"\\BMP\\"+strchar+".Z",CFile::modeWrite|CFile::modeCreate,NULL))
{

file.Write(pPacked,len);
file.Close();
}

static int charcount = 0;

//保存到文件并创建位图结构
// CImage m_image
if(charcount++<10)
{
m_image.Attach(hBitMap);
m_image.Save(m_Path+"\\BMP\\"+strchar+".BMP",ImageFormatBMP);
m_image.Detach();
}

MemDC.SelectObject(def_font);
MemDC.SelectObject(pOldmap);
MemDC.Detach();
::ReleaseDC(NULL,hdc);
::DeleteDC(hdcMem);
Featured 2005-03-20
  • 打赏
  • 举报
回复
可以从exe中传入,这是最简单的方法。

也可以自己CreateDC()

19,472

社区成员

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

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