![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамический массив записей [D7, XP]
+++vist+++ © (2008-08-19 22:46:00)Подскажите, как правильно вывести на холст 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", хотя ничего там не прощуено...
Самое интересное то, что в случае использования статического массива такое обращение работает нормально!
Подскажите, в чем может быть ошибка?
Vlad Oshin (2008-08-20 13:32:00) [21]ну так чего было?
что помогло?
интересно, потому что ошибка тупая, мало ли что, на будующее
brother (2008-08-20 12:15:00) [22]> Нет ни малейшего желания!
а на вопросы хочешь конструктивные ответы?
+++vist+++ (2008-08-20 12:14:00) [23]
> Хочешь об этом поговорить?
Нет ни малейшего желания!
Vlad Oshin (2008-08-20 12:00:00) [24]
> Delphi попробовать перегрузить
попробовать :)
Anatoly Podgoretsky (2008-08-20 12:00:00) [25]> +++vist+++ (20.08.2008 11:17:08) [8]
> Я идиот по Вашему?
Хочешь об этом поговорить?
+++vist+++ (2008-08-20 11:49:00) [26]
> а если так?
>
> 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:00) [27]еще можно Delphi попробовать перегрузить
Vlad Oshin (2008-08-20 11:30:00) [28]а если так?
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)
)
;
+++vist+++ (2008-08-20 11:17:00) [29]
> Надо еще выше, нужно видеть хоть одну строку с ;
Я идиот по Вашему? Есть там все точки с запятыми! Видимо, обращение неправильно написано!
brother (2008-08-20 04:44:00) [30]где то я уже слышал о работе с картинками в RGB варианте ;) дежавю?))))))
зы [5] самое оно для автора...
Anatoly Podgoretsky (2008-08-20 01:24:00) [31]
> А выше цикл вывода:
Надо еще выше, нужно видеть хоть одну строку с ;
Amoeba (2008-08-19 23:59:00) [32]
> 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 будет очень простым.
DVM (2008-08-19 23:33:00) [33]
> +++vist+++
очень советую почитать про Scanline
+++vist+++ (2008-08-19 23:11:00) [34]
> 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 22:59:00) [35]image_matrix чаво такое?
Anatoly Podgoretsky (2008-08-19 22:55:00) [36]> +++vist+++ (19.08.2008 22:46:00) [0]
А выше?