请问如何将一个视图view保存成jpg图片

我要提供给客户一个软件的测试版,测试版出的图想只提供pdf版。我能想到的是将不同图纸打开,选择相应的view视图并保存成图片,然后再用程序编辑pdf插入图片,那么请问如何实现将view视图保存为jpg等格式的图片呢?

Parents
  • 如果是问编程实现方法的话,请参考如下代码:

    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;
    }
    运行过程中,调试器获取的变量值如下图所示,为了避免路径转换错误,我在C++/CLI代码中将fileNameP进行了常量定义

    最后得到的结果是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开始的,给我搞混淆了。。。

Reply Children
No Data