Вопрос: Передача картинки в фции других языков | Добавлено: 03.06.07 18:01 |
Автор вопроса: ![]() |
Задача состоит в передачи картинки из вб6 в функцию реализованную на другом языке (Delphi, VC++) в виде DLL. Я не очень разбираюсь в Delphi и VC++ поэтому вопрос состоит в способах передачи картинок, и как дальше обрабатывать полученную картинку..
Ну например, в вб6 я загружаю картинку в stdPicture, если б мне нужно было передать её в функцию на этом же вб6, прототип функции бы был примерно function (pic as stdPictute) Как например быть в этом случае с Delphi и VC++? Какой прототип функции в Delphi и VC++ если я передаю strPictute из вб6? Как потом работать с полученной картинокой? (Взять цвет определённого пикселя)? Или может не морочить голову, а создать DC, загрузить в него картинку и передавать указатель? Как лучше? :) Какие ещё способы возможны? |
Ответы | Всего ответов: 21 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 1876 ![]() |
Профиль | Цитата | #1 | Добавлено: 03.06.07 18:23 |
IPictureDisp -- стандартный вполне интерфейс.
Им параметр и объявляй. |
Номер ответа: 2 Автор ответа: ![]() ![]() Вопросов: 55 Ответов: 1008 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 03.06.07 18:43 |
Или может не морочить голову, а создать DC, загрузить в него картинку и передавать указатель? а чем плохой способ?
С++ любит указатели |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #3 | Добавлено: 03.06.07 19:53 |
Тупой вопрос, а
dim pic1 as IPictureDisp тоже самое что dim pic2 as Picture ? ![]() |
Номер ответа: 4 Автор ответа: ![]() ![]() ICQ: 422640045 Вопросов: 12 Ответов: 144 |
Профиль | Цитата | #4 | Добавлено: 03.06.07 20:10 |
а что это за Picture? Picture это вроде бы свойство контролов, которая указывает фоновый рисунок... |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #5 | Добавлено: 03.06.07 21:04 |
Silver Ferrum
чё правда?! Никогда бы не догадался без тебя... P.S. Пока я не получу от темы нужную мне информацию для того чтобы полностью разобраться в задче, я очень не люблю когда в ней флудят... |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 8 Ответов: 482 |
Профиль | Цитата | #6 | Добавлено: 04.06.07 01:43 |
зависит не от того КАК ты ее передаешь, а как ее получает программа или длл. Например в делфи, да и в других языках картинку можно принимать как файл, указатель или байтовый массив, да как угодно вобщем. Конкретней задай вопрос, в какую прогу передаешь картинку? По делфи могу помочь |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #7 | Добавлено: 04.06.07 01:57 |
Ну даже незнаю как конкретнее, попробую..
в вб6 Dim pic as Picture pic = LoadPicture ("C:\1.bmp" ![]() Далее этот пик нужно передать в функцию на делфи например. Вопросы: Как передать pic? Как принять на другой стороне? (прототип функции) Как работать с полученным пик на другой стороне? (Получить цвет пикселя) Лучше примерчиком.. Вот ты говориш в делфи разбираешся. Напищи плз функцию которая принимает один параметр (если надо - больше) - картинку из вб6. И MassageBox'ни цвет пикселя 1,1 P.S. Или лучше всё же через IPictureDisp? Я не говорю что на вб должно быть менно так как я написал, я рассматриваю все варианты и выбираю лучший... |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 30 Ответов: 683 |
Профиль | Цитата | #8 | Добавлено: 04.06.07 07:30 |
А ты не пробовал загрузить картинку в PictureBox и передавать программам hDC?
Если все же хочешь через пикчер - по-моему функции OLELoadPicturePath и OLECreatePictureIndirect работают с IPicture |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #9 | Добавлено: 04.06.07 14:56 |
Такс, чуствую совсем дело плохо, походу я заблудился...
Объясните мне разницу между IPicture IPictureDisp StdPictute dim lala as Picture Где-то в подсознании я понимаю что это не 4 разных типа, но конкретно связать ничего не могу. |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 233286456 Вопросов: 34 Ответов: 5445 |
Web-сайт: Профиль | Цитата | #10 | Добавлено: 05.06.07 01:15 |
StdPictute и Picture одно вроде бы псевдоним для другого ![]() IPicture и IPictureDisp это интерфейсы, например ты не сможешь их объявить с ключевым словом New ![]() HACKER, вобщем тебе тут хочут сказать что не парься, если ты обычную нашу picture передаш, то и дельфи и Сиплюсы все поймут, при желании ![]() |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 8 Ответов: 482 |
Профиль | Цитата | #11 | Добавлено: 06.06.07 01:48 |
to HACKER:
Dll могу написать толко в суб. или воскрю так как на работе делфи нету, а дома нету времени. Если подождешь - будет тебе пример. Ну а пока совет: 100% рабочий способ: лет 6-7 назад делал на делфи3 длл для похожих целей. Нужно было передавать массив байт в длл для обработки. Из других прог выделялся кусок оперативки и забивался данными а потом вызывалась функция из моей длл и как параметр передавался только указатель. Функция в длл читала массив из оперативки по указателю. Этот же способ можно использовать для картинки или любых других данных. Способ 2: Делфи 5 -6 я пропустил а в 7-ке и выше можно было использовать SOAP HACKER, вобщем тебе тут хочут сказать что не парься, если ты обычную нашу picture передаш, то и дельфи и Сиплюсы все поймут, при желании
![]() С геморроем и головной болью да. Лучше всего как параметр передавать стандартные типы - Строка или Integer Long (как указатель на память или путь к файлу) |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #12 | Добавлено: 06.06.07 02:06 |
sne, хм.. ну ок, если я передаю нашу picture ..
1) Можно пример функции которая принимает picture на сях? 2) Если там указатель, на.. на что там будет указатель? Как вообщем работать с тем что я передам на сях дальше? ![]() BUMM, Спешить мне некуда, сессия всёравно.. так что я за компом гуляю по инету немного. Если у тебя будет время, и тебя это не затруднит - напиши пожалуйста. Или выложи ту длл которую ты давно писал... Ещё в принципе варинат, как ты говоришь через указатели.. но "выделять кусок оперативки" - слишком абстрактно как-то. Ты имеешь ввиду shared memory? P.S. Я вот думаю, ещё как вариант - передавать массив структур в котором будект картинка попиксельно лежать.. ну типа struct pic { r as byte; g as byte; b as byte; height as long; width as long; }; Мне в принципе то всёравно с ней дальше попиксельно работать ![]() |
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #13 | Добавлено: 06.06.07 16:38 |
От в делфяк допустим фция типа
function myfunc(Imagex:TBitmap):string; Как сюда передать картинку из вб? Можно ли провести такой аналог: TBitmap(Delphi)=StdPicture(VB) ? |
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #14 | Добавлено: 07.06.07 16:11 |
^
| |
Номер ответа: 15 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 8 Ответов: 482 |
Профиль | Цитата | #15 | Добавлено: 08.06.07 00:13 |
TBitmap(Delphi)=StdPicture(VB)
нет однозначно. примерно так можно передать массив из Float примерно так выглядит длл library MyDll;
uses SysUtils, Classes, ![]() ![]() {$R *.res} procedure TestDLL(AArray: TArrayFloat); Stdcall; var i: integer; Begin for i := Low(AArray) to High(AArray) do ShowMessage(FloatToStr(AArray)); End; Exports TestDLL name 'TestDLL'; begin end. +юнит с интерфейсом unit DllTypes; interface type TArrayFloat = array of Float; procedure TestDLL(AArray: TArrayFloat);Stdcall; implementation procedure TestDLL(AArray: TArrayFloat); Stdcall; External 'MyDll.dll' name 'TestDLL'; end. Вызывать также как методы из API Ты до воскресенья подождать можешь? дам готовую длл-ку |
|