GetPreviewBitmapFile сохранить растровое изображение предварительного просмотра со странными цветами (SolidWorks)
Я разрабатываю макрос C# VSTA для нашего производственного отдела. я использую SldWorks.GetPreviewBitMapFile
чтобы сохранить предварительный просмотр выбранной модели и отобразить ее в графическом окне, как показано ниже:
Код выглядит хорошо и выполняется хорошо, за исключением странных цветов:
bool status = swApp.GetPreviewBitmapFile(filepath, configuration, "D:\\preview.bmp");
pictureBox1.ImageLocation = "D:\\Preview.bmp";
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.Refresh();
У кого-нибудь была подобная проблема и что за средство?
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.
Мне удалось заставить его работать в SolidWorks x64 только в надстройке.NET и в макросах VBA. Дайте мне знать, если вам нужен пример надстройки.
Обновление для SW2016. Функция GetPreviewBitmapFile работает для консольной программы Csharp вне процесса. Однако цвета сгенерированного растрового изображения очень странные. Оказывается, единственное правильное решение - использовать функцию SaveBmp.