Не работает массив объектов Bitmap, PascalABC.NET

Уже неделю не могу понять, в чем дело. Вот код:

и вывод:

image

Создаём массив объектов Bitmap и переменную, хранящую текущий индекс ячейки массива, в которую записали битмапу. В каждом выводе мы можем видеть цвет пикселя (55; 55) битмапы в ячейке с индексом 0 массива arr[].

Первый вывод: в arr[0] загружаем битмапу из файла и смотрим вывод. Работает отлично, смотрим дальше.

Второй вывод: переменную-счётчик увеличиваем на единицу, в arr[1] записываем новую битмапу, которая образуется из arr[0] (берём значение красного канала цвета пикселя и устанавливаем остальные каналы цветов этого пикселя значением красного), затем смотрим вывод цвета пикселя (55; 55) в arr[0] - он изменился. Хотя мы записали новую битмапу в arr[1] (проблема не в том, что мы передаём arr[0] в качестве параметра и в функции меняем пиксели - проверял). Причем, цвет пикселя становится таким, каким должен быть у новой битмапы, которую мы создали. Едем дальше.

Третий вывод: здесь в ячейку arr[1] создаем битмапу из файла. далее смотрим вывод - цвет пикселя (55; 55) в arr[0] не изменился…

Четвертый вывод: тут снова в arr[1] записываем битмапу, преобразованную из arr[1] и смотрим - в arr[0] без изменений.

Не могу понять, почему так происходит. Когда я записываю ячейку с индексом 1, перезаписывается ещё и ячейка с индексом 0. Остальные 13 ячеек не меняются. Битмапы создавались из разных файлов, разных расширений. Пробовал статические и динамические массивы, списки листы и словари - ничего не работает. Может я чего-то не вижу в упор или что

Если хотите чтобы кто-то помог разобраться в вашем коде - обычно хорошая идея, запостить его так чтобы можно было скопировать и сразу запустить, посмотрев результаты.

И в данном случае вы даже не нашли минимальный код. Проекты wf для этого ни к чему. Лучше сделать отдельный пустой файл, написать в качале wf и нажать Shift+Space. Затем вставить туда важные части этого кода.

По теме:


Чем именно вы проверяли и как?

Битмап это класс (ссылочный тип), а значит в переменной типа Bitmap хранится ссылка на объект. А значит и при передаче в подпрограммы - копируется ссылка на исходный битмап, а не вся картинка (большая часть данных которой обычно хранится в памяти GPU).

не знал, что он ссылочкой… теперь всё ясно, очень благодарен