Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 23.01.2012
Сообщений: 257

Не работает Image2

08.11.2024, 20:38. Показов 2177. Ответов 25

Студворк — интернет-сервис помощи студентам
Здраствуте. Проверил матрицу turnfull, все данные в ячейках верны, в assemler орабатывает без ощибок.В конце программы, матрица turnfull , как только переходит в Image2.Picture.Bitmap.Canvas.Pixels[ix,iy] или ListBox1.Items.Add(IntToStr(ini ) компелятор показывает ошибку. access violation at 0x00000000; read of address 0x00000000. Заранее спасибо.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
unit turnsquar4;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Jpeg,
  Dialogs,StdCtrls, ExtDlgs, ExtCtrls;
 
type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    OpenPictureDialog1: TOpenPictureDialog;
    Image2: TImage;
    procedure Button1OnClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  f: TFileStream;
  Form1: TForm1;
  
   turncolour: array[0..335,0..445] of integer;
 
implementation
 
{$R *.dfm}
 procedure LoadPicture(FileName: string; Bitmap: TBitmap);
var
  pic: TPicture;
begin
  pic := TPicture.Create;
  try
    pic.LoadFromFile(FileName);
    Bitmap.Width  := pic.Graphic.Width ;
    Bitmap.Height := pic.Graphic.Height;
    Bitmap.Canvas.Draw(0, 0, pic.Graphic);
  finally
    pic.Free;
  end;
end;
 
 
 
procedure TForm1.Button1OnClick(Sender: TObject);
 
  
    var
  Total: Longword;
  OperBegin, OperEnd: TTimeStamp;
 
begin
 OperBegin:=DateTimeToTimeStamp(Now);
 
 
    Image2.Picture.Bitmap.Canvas.Pen.Color := clBlack;
    Image2.Picture.Bitmap.Canvas.Pen.Width :=1;
    Image2.Picture.Bitmap.Canvas.Brush.Style := bsClear;
 
 
  
  if OpenPictureDialog1.Execute then
  begin
 
      Image2.AutoSize := true;
      LoadPicture(OpenPictureDialog1.FileName, Image2.Picture.Bitmap);
 
 asm
                       push eax 
                        xor eax,eax  
                        push edx    
                        xor edx,edx
                        push ecx
                        xor ecx,ecx
                      mov cx,sx
                      imul ecx,446
                      add cx,sy 
                        mov dx,syL2
                        shl edx,16// 
                        mov dx,sxL2 
                      lea eax,turnfull
                      mov [eax+4*ecx],edx 
                      inc icountTurnFull//
                      inc  icountLine2Stop
                        pop ecx 
                        pop edx//
                        pop eax// 
                           push eax  // 
                           xor eax,eax
                         mov icL2Turn,eax
                            pop eax
                      jmp ii4//  
   
end;
 
  ini:=0; 
begin
   for ix:=0 to 335 do 
begin
   for iy:=0 to 445 do 
begin
 
 if  ( turnfull [ix,iy]>0)then 
begin
  ini:=ini+1;
  iy2:= turnfull[ix,iy] shr 16; 
  ix2:= turnfull[ix,iy] and $0000ffff;
  Image2.Picture.Bitmap.Canvas.Pixels[ix,iy] := clRed;
 { ListBox1.Items.Add(IntToStr(ini ) + ' TurnFull Íîìåð ÿ÷åéêè.');
  ListBox1.Items.Add(IntToStr(ix ) + ' ixTurnfull');
  ListBox1.Items.Add(IntToStr(iy ) + ' iyTurnfull');
  ListBox1.Items.Add(IntToStr(ix2 ) + '     ixline2');//
  ListBox1.Items.Add(IntToStr(iy2 ) + '     iyline2');}
end;
 end;
  end;
   end;
 
OperEnd:=DateTimeToTimeStamp(Now);
  Total:=OperEnd.Time-OperBegin.Time;
  ListBox1.Items.Add(IntToStr(Total)+' MSec');
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.11.2024, 20:38
Ответы с готовыми решениями:

на кнопку кликаешь, Image1.Visible:=False; Image2.Visible:=True; Eще раз ликаешь, Image1.Visible:=True; Image2.Visible:=False.
на кнопку кликаешь, Image1.Visible:=False; Image2.Visible:=True; Eще раз ликаешь, Image1.Visible:=True; Image2.Visible:=False. ...

Image1 и Image2
Здравствуйте. У меня возник такой вопрос: на форме есть 2 компонента Image. Нужно чтоб если картинка с папки "1" скажем...

Запрет наведения Image1 на Image2
На форме обе картинки имеют свойство перемещаться и нужно сделать так, чтобы когда первая картинка при перемещении сталкивалась со второй,...

25
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,498
12.11.2024, 16:29
Студворк — интернет-сервис помощи студентам
victor1963, очень много кода, но раз
... как только выходит на
Image2.Picture.Bitmap.Canvas.Pixels[ix,iy] := clRed; или
ListBox1.Items.Add(IntToStr(ini ) + ' TurnFull Номер ячейки.'), то плучаем ошибку. Спасибо.
то уверен, что проблема возникла до этого места. Где-то в предыдущем коде была испорчена память и при обращении к объектам вылетает ошибка.

Добавлено через 59 минут
victor1963, не путай индексы по X и Y для массивов и для Pixels.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var
...
   colour: array[0..400,0..445] of integer;// [0..335,0..445]
 
...
 
      for ix:=0 to 335 do     //Столбец.  for ix:=0 to 335 do
      begin
        for iy:=0 to 445 do //Строка.for iy:=0 to 445 do
        begin
 
          bRed  := GetBValue(Image2.Picture.Bitmap.Canvas.Pixels[ix, iy] );// bRed
          bGreen := GetGValue(Image2.Picture.Bitmap.Canvas.Pixels[ix, iy] );
          bBlue  := GetRValue(Image2.Picture.Bitmap.Canvas.Pixels[ix, iy] );// bBlue
                                                                 //Первый байт выходит bRed, младшее слово, младший байт.
                                                                 //Второй байт выходит bGreen, младшее слово, старший байт.
                                                                 //Третий байт выходит bBlue, старшее слово, младший байт.
 
          if (0< bRed) or (0<bGreen) or (0<bBlue) then //  if (0< bRed) and (0<bGreen) and (0<bBlue) then //
          begin
            ini:=ini+1;
            icountColour:=icountColour+1;
 
            colour[ix,iy]:=RGB(bBlue,bGreen,bRed) ;//=RGB(bRed,bGreen,bBlue)
...
Delphi
1
2
3
4
5
// Для картинки:
  Canvas.Pixels[столбец, строка]
 
// Для массива:
  colour[строка, столбец]
Возможно, в ассемблерном коде это наоборот и потому происходит вылет за границы массива и появляется ошибка.

Добавлено через 3 минуты
Массив объявлен
Delphi
1
   colour: array[0..335,0..445] of integer;// [0..335,0..445]
А дальше:
Delphi
1
   //Размер фото 335*447.
, что больше массива.
0
Нарушитель
10898 / 5832 / 1289
Регистрация: 12.03.2015
Сообщений: 26,920
12.11.2024, 16:30
Цитата Сообщение от AzAtom Посмотреть сообщение
Возможно, в ассемблерном коде это наоборот и потому блаблабла......
У тебя слишком много свободного времени.
Завидовать буду теперь...
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,498
12.11.2024, 16:34
Цитата Сообщение от Verevkin Посмотреть сообщение
Завидовать буду теперь
Не больше, чем у тебя. Тоже неплохо заморачивался.

Вообще, асм код пролистывал. Мне что, делать нечего 3000 асм строк вникать? Только в начале десяток глянул.
0
Нарушитель
10898 / 5832 / 1289
Регистрация: 12.03.2015
Сообщений: 26,920
12.11.2024, 16:44
Цитата Сообщение от AzAtom Посмотреть сообщение
Только в начале десяток глянул.
Мне хватило коммента вот этого:
0
Модератор
10478 / 5772 / 3413
Регистрация: 17.08.2012
Сообщений: 17,535
12.11.2024, 20:57
victor1963, я всё просмотрел. С первого моего взгляда, программа написана зло, но не оптимально. Конечно, это
мой первый вхгляд, и, может быть, я не увидел чего-то. Может, и вправду, 30 лет назад у Вас работали ну очень умные люди, и я просто чего-то не понял. Но, в современных реалиях, переводить масштабные высисления в ассемблер далеко не всегда оправдано. Вы СВЯТО уверены, что 30 лет назад было сделано именно то, что требуется Вам СЕЙЧАС?
3
2 / 2 / 0
Регистрация: 23.01.2012
Сообщений: 257
15.11.2024, 19:54  [ТС]
Здравствуйте. Слава богу. Всё перезагрузил в новую Form и заработала прог.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.11.2024, 19:54

Canvas картинками из Image1 и Image2
Всем привет. Есть код, который на канве делает из текстового файла карту. Вот он: for(int i=0;i&lt;10;i++) { for(int...

Копирование выделенной области из Image1 в Image2
Здравствуйте, имеются два компонента Image. На первом - картинка. Во второй Image необходимо вставить только часть рисунка, которую...

Привязка размеров image2 к картинке в image1
Такая проблема. Имею 2 image(image1, image2) image2 имеет включенное свойство transparent. два image наложены друг на друга в image1...

Можно ли обменять содержимое Image1 с Image2
Подскажите пожайлуста: можно ли обменять содержимое Image1 с Image2, изначально в них картинки загружены png. Смысл в этом, что бы при...

Создание динамического перехода от Image1 к Image2
Очень уж нужна помощь по делу, нашел как прорисовать градиент и другое но конкретно с этим никак не разберусь. Туплю, так как с графикой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru