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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2014, 12:54   #1
denis76560
Форумчанин
 
Регистрация: 13.01.2010
Сообщений: 121
По умолчанию НЕ РЕШЕНО. Вопрос по компоненту Image

Приветствую всех.
Ребят, подскажите пожалуйста по такому коду.

Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  jpgImg: TJPEGImage;
  imagedata:TMemoryStream;
begin
  imagedata:=TMemoryStream.Create;
  jpgImg := TJPEGImage.Create;
  jpgImg.Assign(Image1.Picture.Bitmap);

  jpgImg.SaveToStream(imagedata);
   Image1.Picture.Graphic.SaveToStream(imagedata);
  // imagedata.Position:=0;
  // imagedata.Seek(0, soFromBeginning);
   Image2.Picture.Graphic.LoadFromStream(imagedata);
end;
Данный код возвращает ошибку Access violation at xxxxxxx на строке Image2.Picture.Graphic.LoadFromStre am(imagedata);
Пробовал устанавливать позицию imagedata в ноль двумя путями, увы не помогло.
В компоненте Image1 до начала данной процедуры динамически создается изображение (BMP) каптча.
Мне нужно ее отправить на сервер Antigate. Не хочу писать изображение в файл и потом его отправлять туда, а хочу отправить через TMemoryStream. Обязательно нужно его перед отправкой перевести в формат JPG. Но при попытке даже загрузить из TMemoryStream в Image2 вылетает вышеописанная ошибка.
Подскажите пожалуйста, в чем грабли ?

Последний раз редактировалось denis76560; 01.05.2014 в 15:53. Причина: ошибка
denis76560 вне форума Ответить с цитированием
Старый 01.05.2014, 13:16   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Пробовал устанавливать позицию
при чем тут позиция к Access violation ?
Цитата:
Подскажите пожалуйста, в чем грабли ?
дебагер в курсе
eval вне форума Ответить с цитированием
Старый 01.05.2014, 13:28   #3
denis76560
Форумчанин
 
Регистрация: 13.01.2010
Сообщений: 121
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
дебагер в курсе
Спасибо за ответ.
Но если бы я шарил в асме, я бы такого вопроса не задал бы.

Пробовал устанавливать позицию
Цитата:
Сообщение от eval Посмотреть сообщение
при чем тут позиция к Access violation ?
Потому-что происходит обращение к памяти к которой обращение запрещено.
http://www.delphisources.ru/pages/fa...violation.html

Последний раз редактировалось denis76560; 01.05.2014 в 13:36.
denis76560 вне форума Ответить с цитированием
Старый 01.05.2014, 14:40   #4
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

а модуль jpeg в uses подключен?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 01.05.2014, 14:50   #5
denis76560
Форумчанин
 
Регистрация: 13.01.2010
Сообщений: 121
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
а модуль jpeg в uses подключен?
Да, конечно.
denis76560 вне форума Ответить с цитированием
Старый 01.05.2014, 14:58   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Но если бы я шарил в асме, я бы такого вопроса не задал бы.
при чем тут асм?
Цитата:
Потому-что происходит обращение к памяти к которой обращение запрещено
вы все время отвечаете не на то что спрашивают
в памяти нет позиций, там адресация. а ввы про позицию, еще раз - при чем тут позиция?
eval вне форума Ответить с цитированием
Старый 01.05.2014, 15:08   #7
denis76560
Форумчанин
 
Регистрация: 13.01.2010
Сообщений: 121
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
при чем тут асм?
вы все время отвечаете не на то что спрашивают
в памяти нет позиций, там адресация. а вы про позицию, еще раз - при чем тут позиция?
Да, правда, затупил. Ссори.
Просто не зная асма думаю что в дебаггере навряд-ли разберусь.
А моем примере вроде все сделано правильно (хотя, наверное, ошибаюсь), запись в Tmemorysream, потом чтение из нее.
denis76560 вне форума Ответить с цитированием
Старый 01.05.2014, 15:13   #8
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

у вас AV (Access violation ), ищите кто смотрит в вакуум..
вот тут Image2.Picture.Graphic.LoadFromStre am(imagedata);
Picture инициализирован? а Graphic?
eval вне форума Ответить с цитированием
Старый 01.05.2014, 15:28   #9
denis76560
Форумчанин
 
Регистрация: 13.01.2010
Сообщений: 121
По умолчанию

eval, посмотрите пожалуйста. Буду Вам признателен.
Вроде все инициализировал.
Это весь код программы с моими комментами.

Код:
uses.....,jpeg;

procedure TForm1.letrasAnguladas(c : string; angulo : integer; nextPos : Integer);
var
   logfont:TLogFont;
   font: Thandle;
begin
   LogFont.lfheight:=30;
   logfont.lfwidth:=10;
   logfont.lfweight:=900;

   LogFont.lfEscapement:=angulo;
   logfont.lfcharset:=1;
   logfont.lfoutprecision:=OUT_TT_ONLY_PRECIS;
   logfont.lfquality:= DEFAULT_QUALITY;
   logfont.lfpitchandfamily:= FF_SWISS;
   logfont.lfUnderline := 0;
   logfont.lfStrikeOut := 0;

   font:=createfontindirect(logfont);

   Selectobject(Image1.canvas.handle,font);

   SetTextColor(Image1.canvas.handle,rgb(0,180,0));
   SetBKmode(Image1.canvas.handle,transparent);

   Image1.canvas.textout(nextPos,Image1.Height div 3,c);
   SetTextColor(Image1.canvas.handle,rgb(Random(255),Random(255),Random(255)));
   deleteobject(font);
end;


procedure TForm1.Button6Click(Sender: TObject);
var
   vx:integer;
   strCaptcha:string;
  jpgImg: TJPEGImage;
  imagedata:TMemoryStream;
begin
   imagedata:=TMemoryStream.Create;
   jpgImg := TJPEGImage.Create;
   ///////////////////////////////// генерация капчи в Image1
 strCaptcha:='65348'; ////////// Пример рандомного слова/числа
 for vX := 1 to Length(strCaptcha) do letrasAnguladas(strCaptcha[vX],Random(600)+1,25*vX-15);
 ///////////////////////////////// Запись в TMemoryStream для отправки TMemoryStream на сервер Антигейта
   jpgImg.Assign(Image1.Picture.Bitmap);
   jpgImg.SaveToStream(imagedata);
   Image1.Picture.Graphic.SaveToStream(imagedata);
  // imagedata.Position:=0;
  // imagedata.Seek(0, soFromBeginning);
   Image2.Picture.Graphic.LoadFromStream(imagedata); ////////////  проверка - что у нас в данный момент в TMemoryStream
  ////// отправка на сервер Антигейта в виде TMemoryStream
end;

Последний раз редактировалось denis76560; 01.05.2014 в 15:31.
denis76560 вне форума Ответить с цитированием
Старый 01.05.2014, 15:43   #10
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

у вас дебагер есть, лучший друг программиста, даже лучше чем друг программист
если он скажет что и как - значит так и есть, на 99.99999999999999999999%
никто круче вероятность вам не даст
eval вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос по компоненту TChart 155hatws Помощь студентам 1 03.12.2011 12:26
Вопрос по компоненту DateTimePicker Dux Компоненты Delphi 5 18.09.2010 23:02
Запись иконок из ехе файлов в imagelist с последующим присвоением картинки компоненту image. xaero93 Помощь студентам 2 13.04.2010 14:45
Вопрос по компоненту MediaPlayer FanAnnGeL Компоненты Delphi 4 17.02.2010 00:42
Вопрос по Image (скачанная картинка не хочет выводиться в Image) Radnor Мультимедиа в Delphi 2 06.07.2009 02:20