| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > "Can only modify an image if it contains a bitmap" |
| Автор: quard 16.4.2006, 12:54 | ||||
dll:
прога:
При нажатии на кнопку ругается: "Can only modify an ... " |
| Автор: Alexeis 17.4.2006, 10:13 | ||||
| Ругается он потому что не заданы размеры изображения. Вообщем я это обошел так.
|
| Автор: quard 17.4.2006, 18:32 |
| Гм... Получилось! Сэнк..)) Но получается что рисовать можно только на канве битмапа |
| Автор: z-END 17.4.2006, 18:50 |
именно так.. а чтобы рисовать на чем угодно нужно использовать промежуточную канаву.. т.е. например есть картинка JPEG загружаем ее в picture_1 далее канаве_1 задаем теже размеры что и у picture_1, после чего делаем канава_1.Draw(0,0,picture_1.graphic); и уже канаву_1 отображаем в TImage, где уже спокойно рисуем |
| Автор: quard 18.4.2006, 00:45 |
| Спасибо. Работает. Но я столкнулся с новой проблемой: Изображения не накладываются др. на др.: Если после того как на битмапе нарисовала dll вызвать какой-нить метод канвы битмапа (даже, собственно, не рисуя например Image1.Picture.Bitmap.Canvas.Brush.Color) из главной программы то Bitmap.Canvas очищается... Чё делать?(( ЗЫ: Даа не разрисуешься тут ... |
| Автор: Alexeis 18.4.2006, 09:07 |
| quard, я тоже это заметил когда тестил, более того теряются даже размеры канвы заданные в основной програмее. |
| Автор: quard 18.4.2006, 17:22 |
| Гм. неужели с этим никто никогда не сталкивался и не решил эту траблу... А ведь так нужно.... |
| Автор: Snowy 18.4.2006, 18:28 |
| Попробуй переделать на procedure dllMain(var Img : TImage); Если не поможет, то передавай не TImage, а TBitmap. А при выходе из процедуры, делай Image1.Picture.Assign(bmp). |
| Автор: quard 19.4.2006, 00:10 |
| Snowy Пробовал. Бесполезно... |
| Автор: quard 21.4.2006, 11:39 | ||||
| Кароче единственный выход который я нашел это передача DC. Походу запрещено передвать Image как параметр а потом рисовать на нем.... При передаче DC вроде все норм. но опять трабла: Так рисует:
Так а так нет:
Помогите плз. А то я уже совсем не знаю чё делать... |
| Автор: Alexeis 21.4.2006, 11:56 |
| quard, может дело в том что у длл нет с программой общего менеджера памяти, может просто подключить и в проект и в длл fastsharemem ??? |
| Автор: quard 21.4.2006, 14:26 | ||||
alexeis1, да даже если прога без всяких длл... Просто процедура
не работает (где бы она не находилась/ будь то длл или основная прога) сам проверь... |
| Автор: Alexeis 21.4.2006, 14:34 |
| Есть вариант - передавать указатель на реальный битовый массив и присваивать затем значения реальных цветов один раз по входе в функцию другой раз в программе после получения результата, а вообще лучше устанавливать pixelformat в pf24bit. |
| Автор: quard 21.4.2006, 16:15 |
| Гм.. а можно пример? |
| Автор: Alexeis 25.4.2006, 09:14 |
| здесь я писал как получать адреса http://forum.vingrad.ru/index.php?showtopic=91640 |