| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Двумерный динамический массив |
| Автор: Vetos 18.9.2008, 21:19 | ||||||
| Здравствуйте программисты! Появилась проблема в заполнении такого массива
Вот заполнение
Вродебы на первый взгляд все правильно(ну незнаю это на мой взгляд Однако если явно описать массив
Просто картинка 256х256, это я точно знаю)) И опустить строки с SetLength то картинка отображается нормально. Немогу понять глюка.В приклепленном файле скриншоты. Если скажете что не по адресу, это в графику, то эт не так, с графикой проблем нет, динамический массив неправильно заполняется, помогите пожалуйсто!!! |
| Автор: Alexeis 18.9.2008, 21:28 | ||
Vetos, вместо массива указателей сделай матрицу
Должно помочь. |
| Автор: Vetos 18.9.2008, 21:35 |
| Неа я вначале так и делал, потом хотел тему написать поискал по сайту нашел второй вариант, такая же история, незнаю уже что делать, можно былобы и статический массив сделать но кадрировать текстуры чот не охота)) |
| Автор: Alexeis 18.9.2008, 21:41 |
| Vetos, может быть еще перепутал размеры строк и столбцов. Попробуй наоборот поменять размерности. |
| Автор: Vetos 18.9.2008, 21:48 |
| Так текстура квадратная я уже и ShowMessage проверял Width и Height. Уже в голову ничего не лезет |
| Автор: Vetos 18.9.2008, 22:04 |
| Короче я после загрузки массива записывал его в файл, получил два файла с массивами, сравнил их, они идентичны, тоесть все норм, дело в самой OpenGL, чот ненравится ей динамический массив. |
| Автор: CodeMonkey 19.9.2008, 04:41 |
| Учли, что переменная динамического массива - это не указатель на первый элемент данных? Как передаёте его в функцию? А как сохраняли массивы? Если в функцию сохранения вы два раза передали одинаковые даные с разных массивов, то (при условии, что в OGL так же передаёте) и разницы при их выводе быть не должно. |
| Автор: Vetos 19.9.2008, 20:09 |
| Alexeis, большое спасибо+ Теперь хочу немного разобраться как оно работает Получается трехмерный массив строится в памяти строкой за строку, я это понял из того что процедура Move копирует участок памяти из Texture в pTmp начиная с LSize. Так получается последовательность, что собсвенно и есть массив. Если это я правильно понял. Есть несколько вопросов: 1)Что такое PAnsiChar? Почемуто Ctrl+Левая мыша просто указывает мне на модуль System. Как оно описано? 2)Чем отличается динамический массив от обычного(я имею ввиду в памяти). 3)Что значит удалить pTexture после использования? Спасибо! |
| Автор: Alexeis 19.9.2008, 20:25 | ||||||||
Ну почти, строка за строкой это двумерный массив, но каждый элемент строки тоже массивчик из 4 элементов, поскольку он не динамической размерности то элементы строки идут непрерывным блоком. Если бы 3я размерность была динамической то каждый элемент строки был бы тоже указателем.
Простой типизировнный указатель. Указатель на символ. В данном случае удобно интерпретировать байты как символы, потому что над указателями типа PAnsiChar можно производить арифметические операции (над другими нельзя, нужно дополнительное приведение). Раньше использовали PChar, но это уже не прокатывает в 2009й делфе так как там юникод, потому именно PAnsiChar.
Одномерный динамический массив почти такой же как и простой, элементы идут друг за другом. Статическая матрица, это строки идущие одна за другой, динамическая матрица это массив указателей, каждый из которых указывает на свою строку. |
| Автор: Vetos 19.9.2008, 20:37 |
| Спасибо |