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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2015, 17:16   #1
DenIvan
 
Регистрация: 25.02.2015
Сообщений: 6
Сообщение

Всем здравствуйте. Сохраняю разные файлы в формат bmp, а затем из bmp вывожу матрицу цветов пикселей. И вот на одном из jpg изображений при попытке получить матрицу (процедура TForm1.Button2Click) выходит сообщение с ошибкой:
Цитата:
---------------------------
Debugger Exception Notification
---------------------------
Проект Capcha.exe вызвал исключение класса EAccessViolation с сообщением 'Access violation at address 0048A3A8 in module

'Capcha.exe'. Read of address 01155000'. Процесс остановлен. Используйте Шаг или Запуск для продолжения.
---------------------------
OK Help
---------------------------
Само изображение трехмерное. Файл во вложении "не вышло". Другие изображения нормально проходят матрицу (например, файл во вложении "вышло"). В чем же дело: в том что изображение трехмерное и надо как-то по-другому с ним работать, или в чём другом? Прошу подсказать, пожалуйста. Вот код (Button1Click-выбор исходного файла, задание имен исходника и bmp файла; Button3Click - сохранение исходника в bmp-файл; Button2Click - получение матрицы цветов пикселей файла bmp - здесь проблемы):

Код:
uses
  Windows, ..., jpeg, pngimage, GifImage;
.............
procedure TForm1.Button1Click(Sender: TObject);

begin

 if OpenDialog1.Execute then Image1.Picture.LoadFromFile(OpenDialog1.FileName);
 //Image1.Stretch:= true;
 Edit4.Text:=OpenDialog1.FileName;
 Edit1.Text:=StringReplace(OpenDialog1.FileName,
            ExtractFileExt(OpenDialog1.FileName),'',[])+'.bmp';
end;


procedure TForm1.Button2Click(Sender: TObject);
var
 Line: pByteArray;
 i, j: integer;
 s   : string;
 sl  : TStrings;
 sl2  : TStrings;
 bmp : TBitmap;
 begin
 sl:= TStringList.Create;
 sl2:= TStringList.Create;
 bmp:= TBitmap.Create;
 bmp.LoadFromFile(Edit1.Text);
for i:= 0 to bmp.Height - 1 do
  begin
   s:= '';
   j:= 0;
   Line:= bmp.ScanLine[i];
   while  j <= bmp.Width * 3  do
    begin
      s:='R'  + IntToStr(Line[j]) +
      'G'  + IntToStr(Line[j+1]) +
      'B'  +IntToStr(Line[j+2]);
     inc(j, 3);
     sl.Add(s);
    end;
   end;
 sl.SaveToFile('D:\Делфи 7 проекты\Матрица капчи.txt');
 sl.Free;

 Edit2.Text:=IntToStr(bmp.Width+1);
 Edit3.Text:=IntToStr(bmp.Height);
 sl2.Add(IntToStr(bmp.Width)+ '; ' + IntToStr(bmp.Height));
 sl2.SaveToFile('D:\Делфи 7 проекты\Размер капчи.txt');
 sl2.Free;
 bmp.Free;
end;


procedure TForm1.Button3Click(Sender: TObject);
var
  bmp: TBitmap;
begin
bmp:=TBitmap.Create;
  with TPicture.Create do begin
    LoadFromFile(Edit4.Text); //jpg,png,gif,bmp
    bmp.Assign(Graphic);
    Free;
  end;
  bmp.SaveToFile(Edit1.Text);
  bmp.Free;
  Image2.Picture.LoadFromFile(Edit1.Text);
end;

end.
Вот вложение, а то забыл
Вложения
Тип файла: rar Вышло-не вышло.rar (16.3 Кб, 11 просмотров)

Последний раз редактировалось Stilet; 27.02.2015 в 17:36.
DenIvan вне форума Ответить с цитированием
Старый 27.02.2015, 17:37   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Та-а-а-кс, а собственно что дали попытки отладки?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.02.2015, 18:58   #3
DenIvan
 
Регистрация: 25.02.2015
Сообщений: 6
По умолчанию

Отладка остановилась вот на этой точке процедуры Button2Click:

Код:
s:='R'  + IntToStr(Line[j]) +
DenIvan вне форума Ответить с цитированием
Старый 27.02.2015, 19:29   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
while j <= bmp.Width * 3 do
Пример из Хелпа:
Цитата:
P := BitMap.ScanLine[y];
for x := 0 to BitMap.Width -1 do
P[x] := y;
А ты ширину на 3 умножаешь. Судя по всему не надо.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.02.2015, 19:49   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

автор, ты чо, скриншоты делать не умеешь?
научить?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 02.03.2015, 17:30   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Сообщение от DenIvan Посмотреть сообщение
Отладка остановилась вот на этой точке процедуры Button2Click:

Код:
s:='R'  + IntToStr(Line[j]) +
Явно выход за границы.
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компрессия BMP в JPG (JPEG) MartyM Общие вопросы C/C++ 2 25.11.2012 00:57
AlphaBlend: наложить bmp на jpg или наоборот fredwriter Помощь студентам 2 17.09.2012 19:28
как в jpg узнать цвет пикселя без конвертирования в bmp? ????????????????? Dima_Dima Помощь студентам 0 26.05.2010 18:51
Проблема преобразование jpg в bmp через dll inndim Общие вопросы Delphi 5 24.06.2008 18:24
Помогите плз с bmp и jpg Svetik Общие вопросы C/C++ 4 27.11.2007 19:00