我要提供给客户一个软件的测试版,测试版出的图想只提供pdf版。我能想到的是将不同图纸打开,选择相应的view视图并保存成图片,然后再用程序编辑pdf插入图片,那么请问如何实现将view视图保存为jpg等格式的图片呢?
如果是问编程实现方法的话,请参考如下代码:
void saveRectangeToFile (BSIRect *pRect, char *imageFileName) { byte *pImage = NULL; Point2d size; size.x = mdlDialog_rectWidth(pRect); size.y = mdlDialog_rectHeight(pRect); mdlImage_captureScreen (&pImage, pRect, 0, IMAGEFORMAT_RGB); mdlImage_RGBToRGBSeparate (pImage, pImage, &size, COLORMODE_RGB, NULL); mdlImage_createFileFromRGB (imageFileName, IMAGEFILE_JPEG, COLORMODE_RGB, &size, pImage, NULL); mdlImage_freeImage (pImage, &size, IMAGEFORMAT_RGB); }
付老师您好,看了您的C++代码进行打印文件,但是您只给了方法体,具体方法的两个参数怎么传入还想请教一下。尤其是第一个BSIRect类的对象该如何从当前的视口进行获取呢?第二个char类型应该是文件路径的字符串吧?
付大神,我尝试mdlImage_saveView失败了,我使用c++/CLI方式实现的,把代码传上来,麻烦您看一下问题出在哪里了好吗?
string fileName = @"d:\a.jpg"; int rrr =mdlImageFunctionsNET.SaveViewToImage(fileName, DPoint2d.FromXY(800, 600), MSRenderMode.SmoothShade, ImageFileFormat.IMAGEFILE_JPEG, false, true, 1);
int MS_CppAPI_NET::mdlFunctionsNET::mdlImageFunctionsNET::SaveViewToImage(String^ fileName, BGN::DPoint2d size, BDPN::MSRenderMode renderMode, ImageFileFormat format, bool stereo, bool anrtiAlias, int view) { //WCharP fileNameP =(WCharP)(WString((WcharCP)(Marshal::StringToHGlobalAnsi(fileName)).ToPointer()).c_str()); WCharCP fileNameP=L"D:\\a.jpg"; Point2d* sizeP = new Point2d(); sizeP->x = (int)size.X; sizeP->y = (int)size.Y; int formatInt = (int)format; DgnPlatform::ImageFileFormat fileFormat = (DgnPlatform::ImageFileFormat)formatInt; int result = mdlImage_saveView(fileNameP, sizeP, (int)renderMode, fileFormat, stereo, anrtiAlias, view); return result; }
最后得到的结果是32768,也不知道是什么错误,麻烦付老师给看一下好吗?
请按如下写法改写您的代码:
void SaveViewToImageTest() { WString fileName { L"d:\\a.jpg" }; Point2d size {500, 600}; int rtn = mdlImage_saveView(fileName.GetWCharCP(), &size, (int)MSRenderMode::SmoothShade, ImageFileFormat::IMAGEFILE_JPEG, false, false, tcb->lstvw); mdlDialog_dmsgsPrint(SUCCESS != rtn ? L"FAILED" : L"SUCCESSFUL"); }
非常感谢,咱们代码主要差在了最后一个参数,我以为MS的View是从索引1开始排列的(因为在软件中下边的视图是从1到8),因此我就传了1,看来传0就对了。
是的。面向用户的view是1~8,编程中viewIndex是0~7,符合C/C++数组索引从0开始的特性。
可能是因为在Utilities.ComApp.ActiveDesignFile.Views[1]方法中,是从1开始的,给我搞混淆了。。。