Страница: 1 | 2 |
Вопрос: Передача картинки в фции других языков
Добавлено: 03.06.07 18:01
Автор вопроса: HACKER
Задача состоит в передачи картинки из вб6 в функцию реализованную на другом языке (Delphi, VC++) в виде DLL. Я не очень разбираюсь в Delphi и VC++ поэтому вопрос состоит в способах передачи картинок, и как дальше обрабатывать полученную картинку..
Ну например, в вб6 я загружаю картинку в stdPicture, если б мне нужно было передать её в функцию на этом же вб6, прототип функции бы был примерно
function (pic as stdPictute)
Как например быть в этом случае с Delphi и VC++? Какой прототип функции в Delphi и VC++ если я передаю strPictute из вб6? Как потом работать с полученной картинокой? (Взять цвет определённого пикселя)?
Или может не морочить голову, а создать DC, загрузить в него картинку и передавать указатель?
Как лучше? :) Какие ещё способы возможны?
Ответы
Всего ответов: 21
Номер ответа: 1
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #1
Добавлено: 03.06.07 18:23
IPictureDisp -- стандартный вполне интерфейс.
Им параметр и объявляй.
Номер ответа: 2
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #2
Добавлено: 03.06.07 18:43
С++ любит указатели
Номер ответа: 3
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #3
Добавлено: 03.06.07 19:53
Тупой вопрос, а
dim pic1 as IPictureDisp
тоже самое что
dim pic2 as Picture
?
Номер ответа: 4
Автор ответа:
Silver Ferrum
ICQ: 422640045
Вопросов: 12
Ответов: 144
Профиль | | #4
Добавлено: 03.06.07 20:10
а что это за Picture? Picture это вроде бы свойство контролов, которая указывает фоновый рисунок...
Номер ответа: 5
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #5
Добавлено: 03.06.07 21:04
Silver Ferrum
чё правда?! Никогда бы не догадался без тебя...
P.S. Пока я не получу от темы нужную мне информацию для того чтобы полностью разобраться в задче, я очень не люблю когда в ней флудят...
Номер ответа: 6
Автор ответа:
BUMM ®
Вопросов: 8
Ответов: 482
Профиль | | #6
Добавлено: 04.06.07 01:43
зависит не от того КАК ты ее передаешь, а как ее получает программа или длл. Например в делфи, да и в других языках картинку можно принимать как файл, указатель или байтовый массив, да как угодно вобщем. Конкретней задай вопрос, в какую прогу передаешь картинку? По делфи могу помочь
Номер ответа: 7
Автор ответа:
HACKER
Разработчик 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
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #8
Добавлено: 04.06.07 07:30
А ты не пробовал загрузить картинку в PictureBox и передавать программам hDC?
Если все же хочешь через пикчер - по-моему функции OLELoadPicturePath и OLECreatePictureIndirect работают с IPicture
Номер ответа: 9
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #9
Добавлено: 04.06.07 14:56
Такс, чуствую совсем дело плохо, походу я заблудился...
Объясните мне разницу между
IPicture
IPictureDisp
StdPictute
dim lala as Picture
Где-то в подсознании я понимаю что это не 4 разных типа, но конкретно связать ничего не могу.
Номер ответа: 10
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #10
Добавлено: 05.06.07 01:15
StdPictute и Picture одно вроде бы псевдоним для другого
IPicture и IPictureDisp это интерфейсы, например ты не сможешь их объявить с ключевым словом New Вроде бы тоже одно и то же, т.к. VB работает с COM исключительно через IDispatch, хотя возможно и ошибаюсь (так было в старых версиях VBA, нового не копал)
HACKER, вобщем тебе тут хочут сказать что не парься, если ты обычную нашу picture передаш, то и дельфи и Сиплюсы все поймут, при желании
Номер ответа: 11
Автор ответа:
BUMM ®
Вопросов: 8
Ответов: 482
Профиль | | #11
Добавлено: 06.06.07 01:48
to HACKER:
Dll могу написать толко в суб. или воскрю так как на работе делфи нету, а дома нету времени. Если подождешь - будет тебе пример.
Ну а пока совет: 100% рабочий способ: лет 6-7 назад делал на делфи3 длл для похожих целей. Нужно было передавать массив байт в длл для обработки.
Из других прог выделялся кусок оперативки и забивался данными а потом вызывалась функция из моей длл и как параметр передавался только указатель. Функция в длл читала массив из оперативки по указателю.
Этот же способ можно использовать для картинки или любых других данных.
Способ 2: Делфи 5 -6 я пропустил а в 7-ке и выше можно было использовать SOAP
С геморроем и головной болью да.
Лучше всего как параметр передавать стандартные типы - Строка или Integer Long (как указатель на память или путь к файлу)
Номер ответа: 12
Автор ответа:
HACKER
Разработчик 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
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #13
Добавлено: 06.06.07 16:38
От в делфяк допустим фция типа
function myfunc(Imagex:TBitmap):string;
Как сюда передать картинку из вб?
Можно ли провести такой аналог:
TBitmap(Delphi)=StdPicture(VB)
?
Номер ответа: 14
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #14
Добавлено: 07.06.07 16:11
^
|
Номер ответа: 15
Автор ответа:
BUMM ®
Вопросов: 8
Ответов: 482
Профиль | | #15
Добавлено: 08.06.07 00:13
нет однозначно.
примерно так можно передать массив из Float
примерно так выглядит длл
uses
SysUtils,
Classes,
 ialogs,
 llTypes in 'DllTypes.pas';
{$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
Ты до воскресенья подождать можешь? дам готовую длл-ку