#c# #interop #compatibility #ole
#c# #взаимодействие #совместимость #ole
Вопрос:
У меня есть система.Рисование.В настоящее время используется Bitmap, и мне нужно преобразовать его в stdole.Стандартное изображение.
В настоящее время я использую:
var pic = (stdole.StdPicture)Microsoft.VisualBasic.Compatibility.VB6.Support.ImageToIPicture
(MyDLL.Properties.Resources.Img); // this is a System.Drawing.Bitmap
но я получаю предупреждение компилятора:
Предупреждение «Microsoft.VisualBasic.Compatibility.VB6.Support.ImageToIPicture (система.Рисование.Изображение)’ устарело: ‘»Microsoft.VisualBasic.Совместимость.* классы устарели и поддерживаются только в 32-разрядных процессах. http://go.microsoft.com/fwlink/?linkid=160862
Итак, что использовать вместо этого? Я пока не смог найти другого решения…
Ответ №1:
взято из NetOffice http://netoffice.codeplex.com Пример добавления Office
public class IconConverter : System.Windows.Forms.AxHost
{
private IconConverter(): base(string.Empty)
{
}
public static stdole.IPictureDisp GetIPictureDispFromImage(System.Drawing.Image image)
{
return (stdole.IPictureDisp)GetIPictureDispFromPicture(image);
}
}
Комментарии:
1. Более подробную информацию вы найдете в исходном сообщении, откуда было скопировано вышесказанное: blogs.msdn.microsoft.com/andreww/2007/07/30 /…
2. Для тех, кому интересно, что такое «stdole»: вы найдете его в Visual Studio Solution Explorer -> Refecence -> Добавить ссылку -> .NET -> stdole
Ответ №2:
Если вы выполните поиск в Google по запросу [преобразовать изображение .net в ole-картинку], вы найдете много разговоров о том, чтобы пойти другим путем (т. Е. Преобразовать ole-картинку в image), и множество советов, которые, по сути, гласят: «не пытайтесь использовать ole-картинки в .NET». Я согласен. Я пошел по этому пути несколько лет назад и решил, что на самом деле мне не так уж сильно нужна OLE-картинка.
Я настоятельно рекомендую вам пересмотреть вашу потребность в объектах OLE picture. Если вы сохраняете изображения в базе данных, храните их как большие двоичные объекты, а не как объекты изображения. Если вам абсолютно необходимо использовать объекты OLE picture, то удачи. Это будет очень неприятно.
Комментарии:
1. Кажется, многим людям нужно сделать это в обратном вызове LoadImage, чтобы настроить изображения кнопок ленты. Сигнатура обратного вызова —
Public Function OnLoadImage(imageId As String) As IPictureDisp
У вас есть предложения о том, как это решить?