3 / 3 / 0
Регистрация: 26.11.2015
Сообщений: 170
|
|||||||||||
1 | |||||||||||
Ошибки с большими массивами17.10.2017, 02:47. Показов 835. Ответов 3
Метки нет (Все метки)
Нужно заполнить массив ссылками на пиксели. Если между try и except отнять 2 вместо 1 массив создастся но затем все равно вылезет ошибка. С малым фото (а значит малым массивом) проблем нет а значит дело в большом массиве. Убедиться в этом можно заменив ширину-1 высоту-1 на меньшие значения.
Массив не создавался потому что мешала -1 в SetLength(Pixel, Image1.Picture.Width-1) и он выходил за предел в цикле. Отредактировать нельзя поэтому перепишу правильно по новой.
Добавлено через 59 минут Сам не знаю как но ошибки больше нет а код тот же, просто создавал масивы разной длины и проверял через showmessage совпадения id ечеек и значения Х и Y после ошибки и убеждался что все правильно написано и в один момент обнаружил что ошибка перестала доставать хотя ни чего не менял в коде кроме строки for X:=0 to Image1.Picture.Width-1 do SetLength(pPixel[X], Image1.Picture.Height-1) там единица не нужна но это было сделано предварительно, после исправления все ровно была ошибка (проверку проводил после удаления 1).
0
|
17.10.2017, 02:47 | |
Ответы с готовыми решениями:
3
Работа с массивами - исправить ошибки Работа с большими массивами Работа с большими массивами Проблема с большими массивами |
17.10.2017, 09:25 | 2 |
жесть
расход памяти просто гигантский будет. точнее - 1.3 к исходному. не имея никакого выигрыша перед доступом к оригиналу ну и алгоритм неверный конец одной строки и начало второй не совпадают, там есть еще несколько байт для выравнивания Запись Pointer(Pixel[X, Y]):=Pointer(P); бессмысленна имеет смысл Pixel[X, Y]:=Pointer(P); но и это непонятно зачем, когда у вас и элементы массива и P одного типа
0
|
3 / 3 / 0
Регистрация: 26.11.2015
Сообщений: 170
|
||||||
17.10.2017, 15:57 [ТС] | 3 | |||||
krapotkin
Экономия памети не всегда бонус к производительности, я раньшэ использовал Byte вместо Integer если не было нужды больше 256 и выяснилось что с Integer все работает быстрее на где то десеть процентов а ведь он больше byte который казалось бы использовать рациональнее.
0
|
17.10.2017, 16:33 | 4 |
процессор работает с integer
чтобы получить байт, ему приходится занулять еще три так что тут все ессно scanline[i] находится с той же скоростью что и pixel[i] остается только второй индекс и тут выигрыш тоже не очень очевиден так что ... но померять конечно можно
0
|
17.10.2017, 16:33 | |
17.10.2017, 16:33 | |
Помогаю со студенческими работами здесь
4
Работа с большими массивами данных Операции с большими массивами данных Советы по оптимизации роботы с большими массивами. Как правильно работать с большими массивами? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |