[v8i MDL] How can I export the DGN default model to an image file without open the DGN?

Hi,

I'm programming with pure MDL (it's a huge application not migrated yet to C++) over MicroStation and Bentley Map SS4.

I need to create programmatically an image file (JPEG, BMP or similar) from the default model of a DGN, but without open the DGN with mdlSystem_newDesignFile.

I know how to to do it when the DGN is open (capturing the screen, printing to JPEG plot driver, etc), but now I need to do ii in that way.

It doesn't matter if the file image is small in size or the quality is not optimal, because I need the image to embed it in a sheet model for plotting.

I've tried the following (via thumbnail) and I can get the JPEG file, but the contents of this file is incorrect (see image below).

 

                   int estat;
                    char fileName[MAXFILELENGTH], fJpg[MAXFILELENGTH];
                    byte *imageBufferP=NULL;
                    int imageSize;
                    byte redPalette[256], grnPalette[256], bluPalette[256];
                    int paletteSize, colorMode;
                    Point2d size;

                    strcpy (fileName, "C:\\dgn\\MapIndex.dgn");
                    strcpy (fJpg, "C:\\dgn\\MapIndex.jpg");
 
                    // Open the thumbnail of the selected dgn.
                    estat = mdlSystem_openFileThumbnail (NULL, NULL, NULL, NULL, fileName, &imageBufferP, &imageSize);

                    if (estat == SUCCESS)

                    {
                      //
                      mdlImage_getExportSupport (&colorMode, NULL, NULL, NULL, NULL, NULL, IMAGEFILE_JPEG);

                      mdlImage_getScreenPalette (redPalette, grnPalette, bluPalette, &paletteSize, statedata.current.screenNumber);

                      size.x = 300;
                      size.y = 300;

                      mdlImage_createFileFromBuffer (fJpg, IMAGEFILE_JPEG, colorMode, &size, imageBufferP, IMAGEFORMAT_BitMap, NULL, NULL, NULL, paletteSize, 0, NULL);
 
                     // Clear buffer.
                     if (imageBufferP)
                     {
                        mdlSystem_freeFileThumbnail (&imageBufferP);
                     }

                  }

 

Please, any hint to solve this question?

Thanks a lot for your help.

Toni

Parents
  • Hi Toni,

    to extend Jon's answer: I think there are three possible ways (a spolier: only full opening works ;-) when talking about converting DGN content to image:

    • Thumbnail as the approach you tried. A problem I see here is that it's not ensured the thumbnail represents default model content. How and when the thumbnail is created can be configured, by default it's a content of View 1 content when Save Settings (Ctrl+F) is activated.  So it can contain black background only, content of another model etc. Or the thumbnail would not be available at all. So to use the thumbnail is not good approach.
    • To open DGN file as work DGN (open for program). Such file can is opened at background, but the problem is that this access does not provide the same functionality as opening DGN as active file (not all MicroStation module are activated and APIs available), so maybe you would be able to create a capture of the file content, but probably a lot of own code is required to receive acceptable result.
    • To open DGN file "normally" as active design file. I agree with Jon, this is the right solution.

    With regards,

      Jan

Reply
  • Hi Toni,

    to extend Jon's answer: I think there are three possible ways (a spolier: only full opening works ;-) when talking about converting DGN content to image:

    • Thumbnail as the approach you tried. A problem I see here is that it's not ensured the thumbnail represents default model content. How and when the thumbnail is created can be configured, by default it's a content of View 1 content when Save Settings (Ctrl+F) is activated.  So it can contain black background only, content of another model etc. Or the thumbnail would not be available at all. So to use the thumbnail is not good approach.
    • To open DGN file as work DGN (open for program). Such file can is opened at background, but the problem is that this access does not provide the same functionality as opening DGN as active file (not all MicroStation module are activated and APIs available), so maybe you would be able to create a capture of the file content, but probably a lot of own code is required to receive acceptable result.
    • To open DGN file "normally" as active design file. I agree with Jon, this is the right solution.

    With regards,

      Jan

Children