| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка Windows Forms > Перетаскивание графического объекта на форму |
| Автор: JohnSparrow 4.4.2008, 17:04 | ||
| Доброго времени суток. Необходимо предоставить пользователям возможность перетаскивать графические объекты в окно приложения (объекты из файлов Корела, Фотошопа, картинки из броузеров и т.д.). Пытаюсь получить изображение следующим образом:
При выполнении i = Image.FromStream(ms); выбрасывается исключение "Недопустимый параметр". При этом MemoryStream из IDataObject для формата Dib возвращается нормальный (т.е. имеет ненулевой размер, данные из него можно вычитать и т.д.). Если же попробовать MemoryStream ms = (MemoryStream)ido.GetData(DataFormats.Bitmap), то возвращается null. Если кто в курсе, буду очень благодарен, поиск по форуму и гугл, к сожалению, не помогли, все описанные там варианты сводятся к этой комбинации. Любопытно также, что при перетаскивании файла, когда ido.GetDataPresent("FileDrop") = true, легко получается создать экземпляр FileStream, загрузить в него данные по имени перетаскиваемого файла и т.д. Если же перетаскивать картинку из броузера, то для нее и ido.GetDataPresent(DataFormats.Dib) = true и ido.GetDataPresent("FileDrop") = true, но загрузить данные из файла через FileStream не удается, равно как и через MemoryStream. |
| Автор: PaZ1T1V 5.4.2008, 09:07 | ||
помоему надо писать так,
где, "чего-то" - это то, во что ты хо4еш переташить рисунок, например pictureBox + Image newImAge = new Bitmap(чего - то.Width, чего - то.Height); Graphics newGraphics = Graphics.FromImage(чего-то); надо будет определить еще в конструкторе. ну мб еще нужно будет молотком подправить |
| Автор: JohnSparrow 5.4.2008, 09:26 |
| Неет, если я получу экземпляр Image, то уж как-нибудь его отрисую, проблема в том, что операция Image i = Image.FromStream(ms) выбрасывает исключение. Короче говоря, не получается загрузить данные графического объекта в формате DIB из MemoryStream в Image. |
| Автор: mr.DUDA 5.4.2008, 11:26 | ||
| Дело в том, что DIB это формат GDI, а по какой-то причине разработчики майкрософт не добавили аналог метода GDI+ создающего изображение из данных DIB в класс Image. Вот хакерский способ обойти это:
|
| Автор: JohnSparrow 5.4.2008, 13:18 |
| Большое спасибо, проблема преодолена. |