2015-10-18 430 views
1

我正在爲我們的製造部門開發C#VSTA宏。 我使用SldWorks.GetPreviewBitMapFile保存選定模型的位圖預覽,並顯示在圖片框如下圖所示:GetPreviewBitmapFile使用奇怪的顏色保存預覽位圖(SolidWorks)

enter image description here

代碼看起來很好,除了奇怪的顏色執行罰款:

bool status = swApp.GetPreviewBitmapFile(filepath, configuration, "D:\\preview.bmp"); 
      pictureBox1.ImageLocation = "D:\\Preview.bmp"; 
      pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; 
      pictureBox1.Refresh(); 

有沒有人有類似的問題,有什麼補救措施?

+0

您是否嘗試用GetPreviewBitmap保存圖像? var h = swApp.GetPreviewBitmap(「Part11.SLDPRT」,「Default」); 位圖iconBitmap = Bitmap.FromHicon(h.handle); iconBitmap.Save(「Part11.bmp」); –

+0

去嘗試一下。 –

+0

不能使用var。我正在使用C#2.0 –

回答

2

這裏是工作的代碼示例:

//to compare output 
iSwApp.GetPreviewBitmapFile(@"c:\Path\Part1.SLDPRT", "Default", @"c:\Path\Part1_0.bmp"); 

object com = iSwApp.GetPreviewBitmap(@"c:\Path\Part1.SLDPRT", "Default"); 
stdole.StdPicture pic = com as stdole.StdPicture; 
Bitmap bmp = Bitmap.FromHbitmap((IntPtr)pic.Handle); 
bmp.Save(@"c:\Path\Part1_1.bmp"); 

大約有GetPreviewBitmap從SW API幾點注意事項:

  • 目前僅在流程的應用程序(也就是宏或加載項)可以使用這種方法;進程外應用程序(即可執行文件)將得到一個自動化錯誤,因爲IPictureDisp接口不能跨進程邊界進行編組。這是Microsoft設計的行爲。有關詳細信息,請參閱Microsoft知識庫。
  • 此方法在SolidWorks x64的宏或進程外應用程序中不受支持。

我只能在.NET加載項和VBA宏中使它在SolidWorks x64中工作。 讓我知道你是否需要插件例子。

+0

代碼在.NET宏中不起作用。 'GetPreviewBitmap'返回一個空值。我在Win X64上運行SW15。 –

+0

是的,在我的回覆中提到「在SolidWorks x64的宏或進程外應用程序中不支持此方法」。我使用插件工作。你有沒有考慮更新你的宏到SW加載項?除了SWDocumetManager之外,我沒有找到另一種預覽方式,但它是不同的故事,我不確定是否有串行密鑰。 –

+0

我通過電子郵件發送了API支持。他們說這是一個高優先級的錯誤,他們正在努力。他們建議我改用ModelDoc2.SaveBMP。感謝您的@Vladyslav。我要打勾你的答案。 –

1

SW2016的更新。 GetPreviewBitmapFile函數適用於進程外Csharp控制檯程序。但是,生成的位圖的顏色非常奇怪。原來唯一有效的解決方案是使用SaveBmp函數。