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

Вниз

Помогите найти ошибку в коде?   Найти похожие ветки 

 
Сорс   (2006-05-09 02:35) [0]

Функция:
function TBMP.GetPixel(x,y:integer):TPixel;
var
 Pixel : ^TPixel;
begin
   Pixel  := Pointer(Integer(Texture) + 3*(x + y*width));
   Result := Pixel^;
end;

Дельфи ругается. Видимо что то не так с указателями. А что именно может быть не так?

Если интересно это из алгоритма вычисления Лайтмэпов. Вот : http://tmtlib.narod.ru/rad8.htm Там и исходник есть.


 
Сорс   (2006-05-09 02:37) [1]

А Texture - это Texture : Pointer;


 
Shaman_Naydak   (2006-05-09 04:54) [2]

Ты уж тогда возвращай указатель на свой TPixel
PPixel = ^TTPixel.. и будет тебе счастье (почти ;) )


 
Сорс   (2006-05-09 06:59) [3]

Как это ?

Заменяю Pixel на PPixel? но результат всё равно тот же самый. Что делать ?

function TBMP.GetPixel(x,y:integer):TPixel;
var
 PPixel : ^TPixel;
begin
   PPixel  := Pointer(Integer(Texture) + 3*(x + y*width));
   Result := PPixel^;
end;


 
antonn ©   (2006-05-09 07:35) [4]

function TBMP.GetPixel(x,y:integer):pPixel;
var
PPixel : ^TPixel;
begin
  PPixel  := Pointer(Integer(Texture) + 3*(x + y*width));
  Result := PPixel^;
end;

?


 
Сорс   (2006-05-09 07:52) [5]

Тогда она мне на эту строчк указывает :    Result := PPixel^;
И пишет [Error] rad8.pas(950): Incompatible types: "TPixel" and "PPixel"


 
Loginov Dmitry ©   (2006-05-09 14:25) [6]

Сорс   (09.05.06 2:35)

Формально код вроде правильный, в принципе ошибки здесь быть не должно.


 
Eraser ©   (2006-05-09 14:36) [7]


> Сорс   (09.05.06 02:35)

как объявден TPixel?
там где этот тип объявлен, объяви и PPixel.


 
Eraser ©   (2006-05-09 14:37) [8]


> объявден

обьявлен


 
wicked ©   (2006-05-09 14:38) [9]

function TBMP.GetPixel(x,y:integer):PPixel;
var
begin
 Result  := PPixel(Integer(Texture) + 3*(x + y*width));
end;

интересно, а зачем лезть туда, где ни в зуб ногой?....
поинтеры - это самая база, на которой все программирование построено.... а тут - такая каша в голове у стольких людей....

ЗЫ на абсолютную корректность кода не претендую - у меня нету дельфи и никак не проверить......


 
Сорс   (2006-05-10 01:19) [10]


> Eraser ©   (09.05.06 14:36) [7]
>
>
> > Сорс   (09.05.06 02:35)
>
> как объявден TPixel?

Вот так :

type
 TPixel = Record
   R, G, B : Byte;
 end;


Вызовы функции например такие :


var
 colorA, colorB :TPixel;
 colorC, colorD :TPixel;
begin
       colorA := lmap[PixelP^.R].GetPixel(PixelP^.G,PixelP^.B);
       colorB := lmap[PixelN^.R].GetPixel(PixelN^.G,PixelN^.B);


Их то изменять не надо ?


 
Карелин Артем ©   (2006-05-10 08:02) [11]

У меня только студия под руками...
А у вас всегда рисунок 24-битный??


 
Сорс   (2006-05-11 01:19) [12]

В строке
 colorA := lmap[PixelP^.R].GetPixel(PixelP^.G,PixelP^.B);
Возникает ошибка из за несоответствия типов TPixel и PPixel.
Не понимаю. Зачем же мне посоветовали ввести какой то PPixel, если он не подходит?

Как быть ?


> Карелин Артем ©   (10.05.06 08:02) [11]
>
> У меня только студия под руками...
> А у вас всегда рисунок 24-битный??

А он там на лету и создаётся.


 
icWasya ©   (2006-05-11 10:50) [13]

а уменя на это Delfi не ругается - в чём дело ?
type
  TPixel = Record
     R, G, B : Byte;
   end;
  TBMP=class
    Texture:Pointer;
    width:Integer;
    function GetPixel(x,y:integer):TPixel;
  end;
function TBMP.GetPixel(x,y:integer):TPixel;
var
Pixel : ^TPixel;
begin
  Pixel  := Pointer(Integer(Texture) + 3*(x + y*width));
  Result := Pixel^;
end;


 
han_malign ©   (2006-05-11 13:07) [14]


> а уменя на это Delfi не ругается - в чём дело ?

- версия другая, в D7 отпустили возжи с приведением указательных типов - Pointer(и, кажется, PChar) приводится к любому указательному типу...

TPixel = packed Record...


 
Карелин Артем ©   (2006-05-11 13:33) [15]


> Сорс   (11.05.06 01:19) [12]

Переключи режим экрана в 256 цветов и попробуй код свой. Будет ли нормально работать он при этом? При создании картинки ЯВНО указано что используется 24-битный пиксель??


 
Сорс   (2006-05-12 02:19) [16]


> Карелин Артем ©   (11.05.06 13:33) [15]


Зачем мне нужен какой то отстойный 256 цветный режим?
Лучше скажи как сделать, чтобы заработало.


 
Сорс   (2006-05-13 01:27) [17]

Ну, так что ? Никто так и не знает как заставить этот код работать?


 
DrPass ©   (2006-05-13 02:15) [18]


> Сорс   (13.05.06 01:27) [17]

А как она у тебя ругается-то на первоначальном варианте? Там все правильно... и кстати, нормально компилируется - специально себя проверил.


 
Сорс   (2006-05-13 03:24) [19]

Виалэйшн Аксесс.
Дельфи 7 ?


 
Сорс   (2006-05-16 03:43) [20]

Ап, понимаешь.



Страницы: 1 вся ветка

Текущий архив: 2006.06.11;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.074 c
15-1147670358
Ega23
2006-05-15 09:19
2006.06.11
С Днём рождения!


2-1148409048
И. Павел
2006-05-23 22:30
2006.06.11
Мелькание картинки при обновлении


3-1145324469
soi
2006-04-18 05:41
2006.06.11
Создание базы MS ACCESS


2-1148327781
Mr tray
2006-05-22 23:56
2006.06.11
из приложения добавить языковую раскладку


2-1148471701
solenko
2006-05-24 15:55
2006.06.11
Програмно выбрать закладку в TPageСontrol