![]() |
|
#1
|
|||
|
|||
![]() Всем здравствуйте. Сохраняю разные файлы в формат 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. |