Форум: "Начинающим";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];
Вниз
Динамический массив записей Найти похожие ветки
← →
+++vist+++ (2008-08-19 22:46) [0]Подскажите, как правильно вывести на холст TImage динамический массив записей!
Идея - программа обработки изображения. С исходного изображения считывается матрица записей
type TMatrix = record
red: byte;
green: byte;
blue: byte;
end;
Потом она обрабатывается по определенному алгоритму и снова выводится на холст TImage. Массив динамический, формируется в зависимости от размеров изображения. Вывожу пискели на холст вот таким способом:
FormLoadImage.Image.Picture.Bitmap.Canvas.Pixels[i, j] := RGB(Unit1.image_matrix[i, j].red, Unit1.image_matrix[i, j].green, Unit1.image_matrix[i, j].blue);
Выдается сообщение "Missing operator or a semicolon", хотя ничего там не прощуено...
Самое интересное то, что в случае использования статического массива такое обращение работает нормально!
Подскажите, в чем может быть ошибка?
← →
Anatoly Podgoretsky © (2008-08-19 22:55) [1]> +++vist+++ (19.08.2008 22:46:00) [0]
А выше?
← →
DVM © (2008-08-19 22:59) [2]image_matrix чаво такое?
← →
+++vist+++ (2008-08-19 23:11) [3]
> image_matrix чаво такое?
Image_matrix - это динамический массив записей. Копия изображения в памяти.
> А выше?
А выше цикл вывода:
for i := 0 to FormLoadImage.Image.Picture.Bitmap.Width - DECREASE do
begin
for j := 0 to FormLoadImage.Image.Picture.Bitmap.Height - DECREASE do
begin
FormLoadImage.Image.Picture.Bitmap.Canvas.Pixels[i, j] := RGB(Unit1.image_matrix[i, j].red, Unit1.image_matrix[i, j].green, Unit1.image_matrix[i, j].blue);
end;
end;
DECREASE - это константа. Были проблемы с попаданием в границы изображения. Я использовал константу для отладки.
← →
DVM © (2008-08-19 23:33) [4]
> +++vist+++
очень советую почитать про Scanline
← →
Amoeba © (2008-08-19 23:59) [5]
> type TMatrix = record
> red: byte;
> green: byte;
> blue: byte;
> end;
А теперь заглянем в модуль Windows:
PRGBTriple = ^TRGBTriple;
{$EXTERNALSYM tagRGBTRIPLE}
tagRGBTRIPLE = packed record
rgbtBlue: Byte;
rgbtGreen: Byte;
rgbtRed: Byte;
end;
TRGBTriple = tagRGBTRIPLE;
{$EXTERNALSYM RGBTRIPLE}
RGBTRIPLE = tagRGBTRIPLE;
И еще советую последовать совету:
> DVM © (19.08.08 23:33) [4]
>
>
> > +++vist+++
>
> очень советую почитать про Scanline
Если использовать "стандартный" тип TRGBTriple то код при использовании обращения через Scanline будет очень простым.
← →
Anatoly Podgoretsky © (2008-08-20 01:24) [6]
> А выше цикл вывода:
Надо еще выше, нужно видеть хоть одну строку с ;
← →
brother © (2008-08-20 04:44) [7]где то я уже слышал о работе с картинками в RGB варианте ;) дежавю?))))))
зы [5] самое оно для автора...
← →
+++vist+++ (2008-08-20 11:17) [8]
> Надо еще выше, нужно видеть хоть одну строку с ;
Я идиот по Вашему? Есть там все точки с запятыми! Видимо, обращение неправильно написано!
← →
Vlad Oshin © (2008-08-20 11:30) [9]а если так?
FormLoadImage.Image.Picture.Bitmap.Canvas.Pixels[i, j] :=
TColor (
RGB(Unit1.image_matrix[i, j].red, Unit1.image_matrix[i, j].green, Unit1.image_matrix[i, j].blue)
)
;
← →
Vlad Oshin © (2008-08-20 11:33) [10]еще можно Delphi попробовать перегрузить
← →
+++vist+++ (2008-08-20 11:49) [11]
> а если так?
>
> FormLoadImage.Image.Picture.Bitmap.Canvas.Pixels[i, j] :
> =
> TColor (
> RGB(Unit1.image_matrix[i, j].red, Unit1.image_matrix[i,
> j].green, Unit1.image_matrix[i, j].blue)
> )
> ;
>
Ок, щас попробую!
← →
Anatoly Podgoretsky © (2008-08-20 12:00) [12]> +++vist+++ (20.08.2008 11:17:08) [8]
> Я идиот по Вашему?
Хочешь об этом поговорить?
← →
Vlad Oshin © (2008-08-20 12:00) [13]
> Delphi попробовать перегрузить
попробовать :)
← →
+++vist+++ (2008-08-20 12:14) [14]
> Хочешь об этом поговорить?
Нет ни малейшего желания!
← →
brother © (2008-08-20 12:15) [15]> Нет ни малейшего желания!
а на вопросы хочешь конструктивные ответы?
← →
Vlad Oshin © (2008-08-20 13:32) [16]ну так чего было?
что помогло?
интересно, потому что ошибка тупая, мало ли что, на будующее
← →
Anatoly Podgoretsky © (2008-08-20 15:59) [17]Какое будущее, у тебя такого будущего не будет.
← →
+++vist+++ (2008-08-20 20:55) [18]
> Какое будущее, у тебя такого будущего не будет.
Не зарекайся!
Еще одна проблема возникла: как передать динамический массив в процедуру в качестве параметра?
← →
grisme © (2008-08-20 21:21) [19]передать указатель на него. %)
← →
Amoeba © (2008-08-20 23:36) [20]
> как передать динамический массив в процедуру в качестве
> параметра?
>
Каком кверху.
← →
+++vist+++ (2008-08-21 00:06) [21]
> передать указатель на него. %)
Да это ослу понятно что указатель! Не знаю как, потому и спрашиваю! Вот например массив
image: array of array of TMatrix;
Как передать указатель на него?
← →
Amoeba © (2008-08-21 00:35) [22]Для начала описываем тип:
type
TImageArray = array of array of TMatrix;
var
image: TImageArray;
SuperPuperProc(AImage: TImageArray);
Передаем так:
SuperPuperProc(image);
Давно пора бы знать элементарные вещи!
← →
+++vist+++ (2008-08-22 23:52) [23]
> Передаем так:
> SuperPuperProc(image);
И где тут указатель? Я именно так и передавал! Ругается!
Может, передаем вот так:
SuperPuperProc(^image); ?
← →
DVM © (2008-08-23 00:19) [24]
> Я именно так и передавал! Ругается!
неправда
← →
DVM © (2008-08-23 00:20) [25]
> Может, передаем вот так:
>
> SuperPuperProc(^image); ?
давай наугад подставлять спереди и сзади имени переменной символы ^ и @
← →
+++vist+++ (2008-08-23 10:30) [26]Все, понял! Я процедуру вызывал, а параметр при вызове не писал! )))))))))))))
Спасибо!
← →
Amoeba © (2008-08-23 11:13) [27]
type
Передаем так:
TImageArray = array of array of TMatrix;
var
image: TImageArray;
procedure SuperPuperProc(AImage: TImageArray);
SuperPuperProc(image);
← →
+++vist+++ (2008-08-24 19:01) [28]
> Передаем так:
> SuperPuperProc(image);
Если передавать так, то указывает на строку присваивания элементу массива
image[i, j].red := i;
где i - число 0..255
и говорит "array type required".
А если не передавать вообще ничего, то программа запускается, но как только идет операция с массивом, тут же выдается Access Violation.
Что интересно: при работе со статической памятью Delphi сама все параметры учитывает! Можно ничего никуда не передавать. А тут не прокатывает...
← →
+++vist+++ (2008-08-24 19:02) [29]
> где то я уже слышал о работе с картинками в RGB варианте
> ;) дежавю?))))))
> зы [5] самое оно для автора...
Дежавю! Я и писал! )))
← →
+++vist+++ (2008-08-25 08:57) [30]Ну так знает кто-нибудь в чем ошибка???
← →
{RASkov} © (2008-08-25 09:14) [31]> [30] +++vist+++ (25.08.08 08:57)
> Ну так знает кто-нибудь в чем ошибка???
Ошибка в том, что ты слишком наглый. Тебе говоришь либо вопрос задаешь, а ты в штыки...
Ответ в [22],[27] и не забываем про SetLength для динмассивов...
> и говорит "array type required".
Тыб уж полностью показал бы свой код на "этом месте"...
И еще добавлю на всякий случай: У кого каша в голове у того каша и в коде..... следовательно компилятор сходит с ума)
← →
Anatoly Podgoretsky © (2008-08-25 10:54) [32]
> Ну так знает кто-нибудь в чем ошибка???
В этом
> "array type required".
← →
Amoeba © (2008-08-25 11:00) [33]
> +++vist+++ (25.08.08 08:57) [30]
>
> Ну так знает кто-нибудь в чем ошибка???
Чукча не читатель.
Ты хоть удосужился прочитать и понять посты [22], [27] и [31]? Или просто прикидываешься дурачком?
← →
+++vist+++ (2008-08-25 18:58) [34]
> И еще добавлю на всякий случай: У кого каша в голове у того
> каша и в коде..... следовательно компилятор сходит с ума)
Ничего подобного! Видел программы, состоящие из откровенной мешанины кода! И ничего - работали!
P.S. Большое спасибо за помощь! Все работает!
← →
TStas © (2008-08-25 23:09) [35]Просто точно ли это всё нужно? Вот взять картинку и попиклельно всю устанавливать? Ведь есть же, ну просто куча всего. Обращаться к картинке попиксельно - это плохо.
← →
+++vist+++ (2008-08-30 22:26) [36]
> Просто точно ли это всё нужно? Вот взять картинку и попиклельно
> всю устанавливать? Ведь есть же, ну просто куча всего. Обращаться
> к картинке попиксельно - это плохо.
А что я могу сделать если Wavelet сжатие подразумевает попиксельную обработку изображения!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.051 c