AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.03.2009, 19:13   #1  
rkorchagin is offline
rkorchagin
Участник
 
81 / 69 (3) ++++
Регистрация: 26.09.2006
? Как преобразовать 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();
}
DAX4 4.0
Старый 30.03.2009, 21:32   #2  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
А почему бы все выше написанное не сделать на X++?
Старый 31.03.2009, 10:44   #3  
rkorchagin is offline
rkorchagin
Участник
 
81 / 69 (3) ++++
Регистрация: 26.09.2006
Это просто тест - в дальнейшем рисунок будет очень сложным. И хотелось бы выяснить возможно ли из .NET bitmapa получить рисунок в Аксапту не сохраняя на диск.
Старый 31.03.2009, 11:31   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от rkorchagin Посмотреть сообщение
Надо битмап нарисованный в аксапте классами .NET каким ио образом перевести в Bitmap самой аксапты для использования в display методе.
Вроде бы у System.Drawing.Bitmap есть метод GetHbitmap(), создающий соотв. объект GDI, а у аксаптовского Image есть метод importBitmap(int _hBitmap).
За это сообщение автора поблагодарили: rkorchagin (1).
Старый 31.03.2009, 12:00   #5  
rkorchagin is offline
rkorchagin
Участник
 
81 / 69 (3) ++++
Регистрация: 26.09.2006
К сожалению это вызывает ошибку в importBitmap

X++:
image.importBitmap(bmp.GetHbitmap());
Старый 31.03.2009, 12:14   #6  
rkorchagin is offline
rkorchagin
Участник
 
81 / 69 (3) ++++
Регистрация: 26.09.2006
Получилось! Оказалось 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  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Только не забудьте освобождать полученный hBitmap, а то у вас будет быстро отъедаться память на создаваемые при каждом вызове display-метода объекты GDI.
Старый 31.03.2009, 15:59   #8  
rkorchagin is offline
rkorchagin
Участник
 
81 / 69 (3) ++++
Регистрация: 26.09.2006
Цитата:
Только не забудьте освобождать полученный hBitmap, а то у вас будет быстро отъедаться память на создаваемые при каждом вызове display-метода объекты GDI.
OK. Сделал DeleteObject в конце - и действительно потом в MSDN нашёл:

Цитата:
.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

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вставка строк в таблицы Аксапты сторонними средствами Андре DAX: База знаний и проекты 1 07.05.2009 16:49
palleagermark: Creating an image file based on plain text from AX Blog bot DAX Blogs 0 03.03.2009 03:08
axaptapedia: Image class Blog bot DAX Blogs 0 22.07.2008 15:05
Issues concerning X++: Missing values: getting the System.Missing.Value value Blog bot DAX Blogs 0 16.01.2008 02:49
axaptapedia: Layer System Blog bot DAX Blogs 0 17.11.2007 05:45

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:08.