Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1220527371
fellow
2008-09-04 15:22
2008.10.12
форма не хочет Show поверх всех


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


6-1193938102
Жека
2007-11-01 20:28
2008.10.12
два потока. события, синхронизация


15-1219138424
MBo
2008-08-19 13:33
2008.10.12
Вот как люди, всю душу вкладывая, переменные "отчищают" ;)


2-1220392769
Drone
2008-09-03 01:59
2008.10.12
Выпадающее Меню и другие вопросы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский