![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Вот я такой мачо. Извините за бред.
Вот моя идея я хочу научиться работать через указатели, потому что через них происходит самая быстрая передача всех данных на компьютере. Я это понял прочитав о функции Scanline. Прошу описать поподробнее как происходит передача данных в картинке через эту функцию. А поподробнее прошу рассказать про то где присваиваються значения цветов а где адреса указателей ? И где именно через указатель значение бестро передаеться в массив. ? А так же на примере Scanline прошу поподробнее обьяснить, по какой схеме происходит передача данных через указатели в общем случае, а не только через функцию Scanline ? Заранее, весьма премного благодарен. |
#2
|
||||
|
||||
![]() Цитата:
![]() ![]() ![]() Быстрый ты наш))) |
#3
|
||||
|
||||
![]() Код:
procedure TSGIImage.SetColor(X, Y:integer; R,G,B:byte; A:byte=255); var ba:PByteArray; //указатели на строку Y изображения p:PRGBTriple; q:PRGBQuad; begin if Bitmap.PixelFormat=pf8bit then //если изображение монохромное 8бит begin ba := PByteArray(Bitmap.ScanLine[Y]); //получаем адрес строки Y ba[X]:=R; //Задаем значение пикселя X, находящегося по адресу ba[X] end else if Bitmap.PixelFormat=pf24bit then //если цветное 24бит begin DWORD(p) := DWORD(Bitmap.ScanLine[Y]) + (X * SizeOf(TRGBTriple)); //значение указателя := Адрес Y строки + смещение на X пикселей p.rgbtRed:=R; //Задаем значения пикселя X, находящегося по адресу p p.rgbtGreen:=G; p.rgbtBlue:=B; end else if Bitmap.PixelFormat=pf32bit then //если цветное с прозрачностью begin DWORD(q) := DWORD(Bitmap.ScanLine[Y]) + (X * SizeOf(TRGBQuad)); //значение указателя := Адрес Y строки + смещение на X пикселей q.rgbtRed:=R; //Задаем значения пикселя X, находящегося по адресу q q.rgbtGreen:=G; q.rgbtBlue:=B; q.rgbtAlpha:=A; end; end; Код:
X:=0; DWORD(p) := DWORD(Bitmap.ScanLine[Y]); //получаем адрес строки repeat p.rgbtRed:=R; //Задаем значения пикселя p.rgbtGreen:=G; p.rgbtBlue:=B; X:=X+1; DWORD(p) := DWORD(p) + (X * SizeOf(TRGBTriple)); //сдвигаем указатель until x>=Bitmap.Width; РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت |
#4
|
|||
|
|||
![]() Спасибо ! Вам !
Последний раз редактировалось bistriy, 03.11.2010 в 11:44. |
#5
|
||||
|
||||
![]() Цитата:
обычные типы и массивы не лучший пример (их легче просто присвоить), но раз просите: Код:
type PString = ^String; //type foo = ^bar - это объявление нового типа foo как указателя на объект или переменную типа bar ... var p, p2:PString; //объявляем переменную-указатель Src,Dst : String; //Исходная и конечная строки begin //Использование динамических переменных (здесь это p) //тут p=nil, т.е. пустому указателю GetMem(p, Length(Src)+1); //выделяем участок памяти размером с исходную строку (включая нулевой символ) и записываем адрес этого участка в указатель //тут p=некоторому адресу p^:=Src; //копируем исходную строку в новую. foo^ - означает доступ к объекту/переменной, хранящейся по адресу, на который указывает foo //вот, собственно, и все. строка скопирована и обращаться к ней надо по p^ ... FreeMem(p); //поработали со строкой - надо теперь память за собой почистить p:=nil; //на всякий пожарный ... //Доступ к переменной через указатель p2:=@Src; //p2 теперь указывает на Str; @var - возвращает адрес var p2^:='Test'; //записываем строку по адресу, на который указывает p2 //Src теперь равно 'Test'; p2:=nil; //на всякий пожарный ... //Копирование Src -> Dst. для простых типов делать это через указатели бессмысленно и неоптимально p:=@Dst; //p теперь указывает на Dst; p^:=Src; //Dst теперь равна Src p:=nil; //на всякий пожарный end; ну и лучше из какого-нибудь учебника почитать про них..попонятнее будет. вот для начала можно http://coder.udrabota.com/stat/delphi/gl_15.1.php РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت Последний раз редактировалось KOOL, 03.11.2010 в 10:35. |
#6
|
|||
|
|||
![]() Спасибо ! Вам !
Последний раз редактировалось bistriy, 03.11.2010 в 11:46. |
#7
|
||||
|
||||
![]() поправил
Цитата:
РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت |
#8
|
|||
|
|||
![]() Спасибо ! Вам !
Последний раз редактировалось bistriy, 03.11.2010 в 11:45. |
#9
|
||||
|
||||
![]() Цитата:
Тем более учить. Учить в школе будут, а тут могут только подсказать. |