30.03.2009, 19:13 | #1 |
Участник
|
Как преобразовать System.Drawing.Bitmap в Bitmap/Image Аксапты?
Добрый день!
Надо битмап нарисованный в аксапте классами .NET каким ио образом перевести в Bitmap самой аксапты для использования в display методе. Подскажите, возможно ли это? Пробовал как то через Binary и BinData - но видимо неправильно - так как не получилось. Работает - если сохранять файл на диск а потом загрузить его - но это не лучший вариант..... X++: display Bitmap bmp() { System.Drawing.Bitmap bmp; System.Drawing.Graphics gBmp; System.Drawing.Color color; System.Drawing.SolidBrush brush; Image image = new Image(); ; bmp = new System.Drawing.Bitmap(260, 260); color = System.Drawing.Color::FromArgb(0x60, 0xff, 0, 0); brush = new System.Drawing.SolidBrush(color); gBmp = System.Drawing.Graphics::FromImage(bmp); gBmp.FillEllipse(brush, 70, 70, 160, 160); // bmp.Save(@'c:\2.bmp'); return image.getData(); } |
|
30.03.2009, 21:32 | #2 |
Moderator
|
А почему бы все выше написанное не сделать на X++?
|
|
31.03.2009, 10:44 | #3 |
Участник
|
Это просто тест - в дальнейшем рисунок будет очень сложным. И хотелось бы выяснить возможно ли из .NET bitmapa получить рисунок в Аксапту не сохраняя на диск.
|
|
31.03.2009, 11:31 | #4 |
Участник
|
Вроде бы у System.Drawing.Bitmap есть метод GetHbitmap(), создающий соотв. объект GDI, а у аксаптовского Image есть метод importBitmap(int _hBitmap).
|
|
|
За это сообщение автора поблагодарили: rkorchagin (1). |
31.03.2009, 12:00 | #5 |
Участник
|
К сожалению это вызывает ошибку в importBitmap
X++: image.importBitmap(bmp.GetHbitmap()); |
|
31.03.2009, 12:14 | #6 |
Участник
|
Получилось! Оказалось handle на битмап надо обьявлять не как int а как int64!!!!
Привожу работающий код: X++: display Bitmap bmp() { System.Drawing.Bitmap bmp; System.Drawing.Graphics gBmp; System.Drawing.Color color; System.Drawing.SolidBrush brush; Image image = new Image(); int64 hBitmap; ; bmp = new System.Drawing.Bitmap(260, 260); color = System.Drawing.Color::FromArgb(0x60, 0xff, 0, 0); brush = new System.Drawing.SolidBrush(color); gBmp = System.Drawing.Graphics::FromImage(bmp); gBmp.FillEllipse(brush, 70, 70, 160, 160); // bmp.Save(@'c:\2.bmp'); image.resize(260,260,0); hBitmap = bmp.GetHbitmap(); image.importBitmap(hBitmap); return image.getData(); } |
|
|
За это сообщение автора поблагодарили: samolalex (1), Ace of Database (10). |
31.03.2009, 12:45 | #7 |
Участник
|
Только не забудьте освобождать полученный hBitmap, а то у вас будет быстро отъедаться память на создаваемые при каждом вызове display-метода объекты GDI.
|
|
31.03.2009, 15:59 | #8 |
Участник
|
Цитата:
Только не забудьте освобождать полученный hBitmap, а то у вас будет быстро отъедаться память на создаваемые при каждом вызове display-метода объекты GDI.
Цитата:
.NET Framework Class Library
Bitmap..::.GetHbitmap Method Remarks You are responsible for calling the GDI DeleteObject method to free the memory used by the GDI bitmap object. |
|
Теги |
binary, bindata, bitmap, image |
|
|