当前位置:首页 > 帮助文档 > C++开发 > 光栅图处理
使用控件把dwg文件转成位图DwgToJpgWriteJpgWriteBmpDrawToDc
使用控件把dwg文件转成位图

说明


控件提供的接口,可以把dwg文件转换成Bmp,Jpg文件,也可以把DWG文件中某个区域的图形绘制到CDC上或保存为Bmp文件。这些接口即能在VC中使用,也能在VB,C#,Delphi,网页中调用。

DwgToJpg

DwgToJpg function


作用:不需要使用控件打开dwg文件,直接把dwg文件转成jpg文件。


参数


名称说明

pszDwgFilePath

输入的DWG文件路径

pszJpgFilePath

保存的jpg文件路径

iWidth

位图宽度方向的像素,-1取系统默认值:1000

iHeight

位图高度方向的像素,-1取系统默认值:1000

pBkColor

位图的背影色,如果为NULL,取黑色为背景色


返回值:成功返回TRUE。


VC调用参考例程


void CTestDlg::OnBnClickedDwgtojpgButton()
{
// TODO:
 
CPreviewFileDialog openDlg(TRUE,_T("dwg"),NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
//_T("dwg(*.dwg) | *.dwg||"),
_T("DWG files (*.dwg)|*.dwg|DXF files (*.dxf)|*.dxf|Jpg files (*.jpg)|*.jpg|BMP files (*.bmp)|*.bmp||"),
this);
 
CString sDwgFileName;
if(openDlg.DoModal() == IDOK)
{
sDwgFileName = openDlg.GetPathName();
}
else
{
return;
}
 
//
CString sJpgFilePath;
CFileDialog openJpgDlg(FALSE,_T("jpg"),NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("jpg(*.jpg) | *.jpg||"),
this);
if(openJpgDlg.DoModal() == IDOK)
{
sJpgFilePath = openJpgDlg.GetPathName();
}
else
{
return;
}
 
//
if(MxDraw::DwgToJpg(sDwgFileName,sJpgFilePath,1000,1000) )
{
AfxMessageBox(_T("转换成功"));
}
else
{
AfxMessageBox(_T("转换失败"));
}
 
}


C# 调用参考例程


private void DwgToJpg_Click(object sender, EventArgs e)
        {
            // 创建一个应用对象
            MxDrawApplication app = new MxDrawApplication();
 
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "Dwg 文件(*.Dwg)|*.Dwg|Dxf files (*.Dxf)|*.dxf";
 
            if (ofd.ShowDialog() != DialogResult.OK)
            {
                return;
            }
 
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "jpg 文件(*.jpg)|*.jpg";
 
            if (sfd.ShowDialog() != DialogResult.OK)
            {
                return;
            }
 
            // 1000,1000是转成jpg的像素宽度和高度。
            if(app.DwgToJpg(ofd.FileName, sfd.FileName, 1000, 1000) )
            {
 
                MessageBox.Show("转换成功");
            }
            else
            {
                MessageBox.Show("转换失败");
            }
 
        }
    }
WriteJpg

WriteJpg function


作用:使用控件打开dwg文件或经过了编辑后,调用该函数把它另存为Jpg文件。


参数


名称 说明

hOcx

控件的标识句柄

pszJpgFilePath

保存的Jpg文件路径

lWidth

保存后的Jpg文件像素宽度,取默认值-1,程序就自动取4000

lHeight

保存后的Jpg文件像素高度,取默认值-1,程序就自动取4000

WriteBmp

WriteBmp function


作用:使用控件打开dwg文件或经过了编辑后,调用该函数把它另存为Bmp文件。


参数


名称说明

hOcx

控件的标识句柄

pszJpgFilePath

保存的Jpg文件路径

lWidth

保存后的Jpg文件像素宽度,取默认值-1,程序就自动取4000

lHeight

保存后的Jpg文件像素高度,取默认值-1,程序就自动取4000


VC调用参考例程


void CTestDlg::OnBnClickedSavebmpButton()
{
// TODO: 在此添加控件通知处理程序代码
CFileDialog openDlg(FALSE,_T("bmp"),NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("bmp(*.bmp) | *.bmp||"),this);
 
CString sFileName;
if(openDlg.DoModal() == IDOK)
{
sFileName = openDlg.GetPathName();
}
else
{
return;
}
 
if(!MxDraw::WriteBmp(m_hDrawOcx,sFileName) )
{
CString sError;
if(MxDraw::GetLastError().IsEmpty() )
sError = _T("保存位图文件失败!");
else
sError.Format(_T("保存位图文件失败!原因为:%s"),MxDraw::GetLastError());
AfxMessageBox(sError);
}
else
{
AfxMessageBox(_T("保存成功"));
}
}
DrawToDc

DrawToDc function


作用:绘制控件当前图形中指定区域到CDC对象中。


参数


名称说明

hOcx

标识控件的句柄

pDC

把指定区域的图形中的内容绘制到pDC上

iDCx, iDCy

绘制pDC的左上角位置

iDCWidth,iDCHeight

绘制到pDC上的宽度和高度

dLbx, dLby

指定图形区域的左下角坐标

dRtx, dRty

指定图形区域的右下角坐标


VC调用参考例程


void CTestCommands::DrawToBmp()
{
// 选择让用从图上选择个存位图的区域。
acutPrintf(_T("\n 请点取存位图的区域:"));
 
// 动态拖放输入,让用户确定要保存的区域
CRectSelJig getRect;

// pt1,pt2是矩形框的两点
AcGePoint3d pt1,pt2;
if(!getRect.DoIt(pt1,pt2) )
return;
 
// 让用户选择保存的位图文件.
CTestDlg* pDlg = (CTestDlg*)AfxGetApp()->GetMainWnd();
CFileDialog openDlg(FALSE,_T("bmp"),NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("bmp(*.bmp) | *.bmp||"),
pDlg);
 
CString sFileName;
if(openDlg.DoModal() == IDOK)
{
sFileName = openDlg.GetPathName();
}
else
{
return;
}
 
int iBmpWidth  = 1000;
int iBmpHeight = 500;
 
// 开始保存文件.
CDC dc;
dc.Attach(::GetDC(NULL));
 
CBitmap bm;
bm.CreateCompatibleBitmap(&dc,iBmpWidth,iBmpHeight);
 
CDC tmpDc;
tmpDc.CreateCompatibleDC(&dc);
CBitmap*pOld = tmpDc.SelectObject(&bm);
 
if(MxDraw::DrawToDc(MxDraw::GetCurOcxHandle(),
&tmpDc,0,0,iBmpWidth,iBmpHeight,
pt1.x,pt1.y,pt2.x,pt2.y
)
)
{
tmpDc.SelectObject(pOld);
if(SaveBmp(&bm,&dc,sFileName) )
{
AfxMessageBox(_T("保存成功"));
}
else
{
AfxMessageBox(_T("保存失败"));
}
 
}
else
{
AfxMessageBox(_T("未知原因,保存失败"));
tmpDc.SelectObject(pOld);
}
}
 
 
bool CTestCommands::SaveBmp(CBitmap* pBmp,CDC* pDc,const CString& sBmpFilePath)
{
if(sBmpFilePath.IsEmpty() )
{
AfxMessageBox(_T("文件路径为空"));
return false;
}
BITMAP btm;
pBmp->GetBitmap(&btm);
 
DWORD size   = btm.bmWidthBytes * btm.bmHeight;
LPSTR lpData = (LPSTR)GlobalAlloc(GPTR,size);
/////////////////////////////////////////////
BITMAPINFOHEADER bih;
bih.biBitCount=btm.bmBitsPixel;
bih.biClrImportant=0;
bih.biClrUsed=0;
bih.biCompression=0;
bih.biHeight=btm.bmHeight;
bih.biPlanes=1;
bih.biSize=sizeof(BITMAPINFOHEADER);
bih.biSizeImage=size;
bih.biWidth=btm.bmWidth;
bih.biXPelsPerMeter=0;
bih.biYPelsPerMeter=0;
///////////////////////////////////
GetDIBits(pDc->GetSafeHdc(),*pBmp,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);
 
BITMAPFILEHEADER bfh;
bfh.bfReserved1=bfh.bfReserved2=0;
bfh.bfType=((WORD)('M'<< 8)|'B');
bfh.bfSize=54+size;
bfh.bfOffBits=54;
bool isSuc = false;
CFile bf;
if(bf.Open(sBmpFilePath,CFile::modeCreate|CFile::modeWrite))
{
bf.Write(&bfh,sizeof(BITMAPFILEHEADER));
bf.Write(&bih,sizeof(BITMAPINFOHEADER));
bf.Write(lpData,size);
bf.Close();
isSuc = true;
}
else
{
AfxMessageBox(_T("创建文件失败"));
}
GlobalFree(lpData);
return isSuc;
}
梦想CAD是专业的CAD插件(控件),可轻松在网页、手机及BS/CS程序中浏览编辑DWG文件,不需安装AutoCAD即可运行。经十余年累积已非常稳定可靠,有关键的空间搜索算法,并使用汇编优化,可同时处理50万级实体,有非常高的图形显示和处理效率。
联系我们
TEL:400-888-5703
185-8173-1060
客服I QQ: 3570505660
技术I QQ: 827867134
技术II QQ:6884123
VIP服务购买
销售TEL:156-8136-8971
销售QQ:710714273
用户交流
控件QQ交流群1:73281982
控件QQ交流群2:112199959
MxCAD软件群 1:515771658
技术I:QQ
827867134
客服I:QQ
3570505660
销售QQ
710714273
联系电话400-888-5703