Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.12;
Скачать: CL | DM;

Вниз

Динамический массив записей   Найти похожие ветки 

 
+++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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.016 c
2-1220425933
Сергей
2008-09-03 11:12
2008.10.12
Как отключить выбор пункта по первым буквам в ComboBox?


2-1220354868
оксана
2008-09-02 15:27
2008.10.12
календарный калькулятор


2-1220193371
dars73
2008-08-31 18:36
2008.10.12
Округление чисел


2-1220338927
sD
2008-09-02 11:02
2008.10.12
Изменение FormStyle при создании формы


15-1219213129
rx275d7_jedi
2008-08-20 10:18
2008.10.12
rx275d7_jedi