Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2010, 07:09   #1
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию Ошибка конвертации TJPegImage to a TJpegImage

Здравствуйте.
По какой то причине происходит ошибка конвертации.
Код:
var
  Form1: TForm1;
   procedure ClMem(Sender: TObject); external 'Project1.dll';
   procedure ClSend(ITCPC:TIdTCPClient;Im:TImage;var Host:String;Port:Integer);external 'Project1.dll';
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
mt:TMemoryStream;
ft:TJpegImage;
begin
s:='192.168.0.2';
ClSend(TCPC,Image2,s,5478);
end;
Код Dll

Код:
procedure ClSend(ITCPC:TIdTCPClient;Im:TImage;var Host:String;Port:Integer);
var
   mt:TmemoryStream;
   ft:TJpegImage;
begin
   ITCPC.Host:=Host;
   ITCPC.Port:=Port;
   ITCPC.Connect;
   ft:=TJpegImage.Create;
   mt:=TMemoryStream.Create;
   ft.Assign(Im.Picture.Graphic);
   ft.SaveToStream(mt);
   mt.Position:=0;
   ITCPC.IOHandler.Write(mt,mt.Size,true);
   mt.Free;
   ft.Free;
   ITCPC.Disconnect;
end;
exports
   ClMem,
   ClSend;
Lokos вне форума Ответить с цитированием
Старый 20.10.2010, 07:20   #2
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

Код:
procedure ClSend(ITCPC:TIdTCPClient;Im:TImage;var Host:String;Port:Integer);
var
   mt:TmemoryStream;
   ft:TJpegImage;
begin
try
   ITCPC.Host:=Host;
   ITCPC.Port:=Port;
   ITCPC.Connect;
   ft:=TJpegImage.Create;
   mt:=TMemoryStream.Create;
   ft.Assign(Im.Picture.Graphic);
   ft.SaveToStream(mt);
   mt.Position:=0;
   ITCPC.IOHandler.Write(mt,mt.Size,true);
finally
   mt.Free;
   ft.Free;
   ITCPC.Disconnect;
end;
end;
а если так?
ZvEr_HaCkEr вне форума Ответить с цитированием
Старый 20.10.2010, 07:25   #3
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

та же ошибка только вот не TJpegImage to a TJpegImage
а TImage to a TJpegImage
извиняюсь за не точность
Lokos вне форума Ответить с цитированием
Старый 20.10.2010, 08:08   #4
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Код:
ft.Assign(Im.Picture.Bitmap)
SERG1980 вне форума Ответить с цитированием
Старый 20.10.2010, 08:42   #5
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

Цитата:
Сообщение от SERG1980 Посмотреть сообщение
Код:
ft.Assign(Im.Picture.Bitmap)
пишет ошибку Not assign TImage to TJpegImage
Поменял код вот так

Код:
procedure ClSend(ITCPC:TIdTCPClient;Im:TImage;var Host:String;Port:Integer);
var
   mt:TmemoryStream;
   ft:TJpegImage;
begin
   ITCPC.Host:=Host;
   ITCPC.Port:=Port;
   ITCPC.Connect;
   ft:=TJpegImage.Create;
   mt:=TMemoryStream.Create;
   Im.Picture.Bitmap.Assign(ft);
   ft.SaveToStream(mt);
   mt.Position:=0;
   ITCPC.IOHandler.Write(mt,mt.Size,true);
   mt.Free;
   ft.Free;
   ITCPC.Disconnect;
end;
Вылетает ошибка обращения к несуществующему адресу
Lokos вне форума Ответить с цитированием
Старый 20.10.2010, 08:48   #6
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

Оп понял почему ошибка из за невнимательности пытаюсь присвоить пустоту.
Lokos вне форума Ответить с цитированием
Старый 20.10.2010, 09:00   #7
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

после вот такой модификации стала появляться ошибка
Код:
procedure ClSend(ITCPC:TIdTCPClient;Im:TImage;var Host:String;Port:Integer);
var
   mt:TmemoryStream;
   ft:TJpegImage;
begin
   ITCPC.Host:=Host;
   ITCPC.Port:=Port;
   ITCPC.Connect;
   ft:=TJpegImage.Create;
   mt:=TMemoryStream.Create;
   ft.Assign(im.Picture.Bitmap);
   ft.SaveToStream(mt);
   mt.Position:=0;
   ITCPC.IOHandler.Write(mt,mt.Size,true);
   mt.Free;
   ft.Free;
   ITCPC.Disconnect;
end;
class EJPEG with message JPEG error #42
потому что JPeg пытаюсь присвоить bmp ну мне по крайней мере так кажется. Таких проблем не возникает при использовании
ft.Assign(Im.Picture.Graphic);
но тогда появляется ошибка конвертации.
хотя если делать выше упомянутый код без вызова функции из dll то все чудесно работает, думаю проблема именно в использовании DLL что делать?

Последний раз редактировалось Lokos; 20.10.2010 в 09:18.
Lokos вне форума Ответить с цитированием
Старый 20.10.2010, 09:42   #8
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

Кое где почитав узнал что вроде как Dll и программа имеет разную память поэтому не происходит копирование. Но выход намного проще и занимает меньший объем.
Программа
Код:
var
  Form1: TForm1;
   procedure ClSend(ITCPC:TIdTCPClient;Im:TmemoryStream;var Host:String;Port:Integer);external 'Project1.dll';
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
Im:TmemoryStream;
begin
s:='192.168.0.2';
im:=TMemoryStream.Create;
Image2.Picture.Graphic.SaveToStream(im);
ClSend(TCPC,Im,s,5478);
end;
Dll
Код:
procedure ClSend(ITCPC:TIdTCPClient;Im:TMemoryStream;var Host:String;Port:Integer);
begin
   ITCPC.Host:=Host;
   ITCPC.Port:=Port;
   ITCPC.Connect;
   im.Position:=0;
   ITCPC.IOHandler.Write(im,im.Size,true);
   im.Free;
   ITCPC.Disconnect;
end;
Lokos вне форума Ответить с цитированием
Старый 20.10.2010, 11:00   #9
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Передача рисунка по сети (Indy 10)
Вложения
Тип файла: zip 1.ZIP (352.2 Кб, 40 просмотров)
SERG1980 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TGifImage TJpegImage TPngImage FantasyDD Компоненты Delphi 0 24.05.2010 15:41
Попиксельный доступ к TJPEGImage Serge_Bliznykov Общие вопросы Delphi 4 29.09.2009 22:57
Ошибка при конвертации tools Общие вопросы .NET 1 25.09.2009 21:56
Ошибка конвертации типов. Почему? Alexcomeback Общие вопросы C/C++ 3 17.06.2009 13:28
TMemorystream -> TJPEGimage ( используя сеть ) Lime Работа с сетью в Delphi 2 17.02.2009 03:14