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

Вниз

Работа с указателями не получается   Найти похожие ветки 

 
Вова   (2013-11-09 10:50) [0]


vaR
  StartSource, StopSource: pByte;
  Delta: integer;
  b: Tbitmap;
  Start,ps: pInteger;
  M: TMass;
 
BEGIN
  Start          := b.ScanLine[b.Height - 1];
  StartSource := @M.Mass[x + y * M.Xsize]; //M.mass - array of byte;
..........


Почему вот это работает

if (StartSource + (p^) + Delta)^ = 255 then

а это нет:
(Start + (p^) + Delta) = $89FF1310;


 
вова   (2013-11-09 10:54) [1]

ой (Start + (p^) + Delta)^ = $89FF1310;


вообщем суть ошибки в том что он отказывается прибавлять дельту во втором случае


 
RWolf ©   (2013-11-09 13:48) [2]

$89FF1310 > MaxInt.


 
вова   (2013-11-09 16:01) [3]

Start^ = $89FF1310;

но так все замечательно присваивается

и если сделать ps := (Start + (p^) + Delta) ; ошибка будет таже


 
ProgRAMmer Dimonych ©   (2013-11-09 17:44) [4]

Раз текста ошибки нет, спросим о том, как объявлена p. Чтобы исключить.


 
вова   (2013-11-09 20:06) [5]

var
  StartTemplate, StopTemplate, p: pWord;


if (StartSource + (p^) + Delta)^ = 255 then

if (Start + (p^) + Delta)^ =255 then

[DCC Error] xxx.pas(2078): E2015 Operator not applicable to this operand type

в этих 2х строках разные только первые операнды, но первая всегда работает, а вторая нет.


 
sniknik ©   (2013-11-10 11:45) [6]

> Почему вот это работает
if (StartSource + (p^) + Delta)^ = 255 then
интересный вопрос... ответ - наверное потому что ты врешь. не будет это работать, с той же ошибкой какую приводишь для второго варианта.


 
bems ©   (2013-11-10 17:03) [7]

потому что PByte объявлен с {$POINTERMATH ON} а PInteger без него
чтобы заработало можно сделать {$POINTERMATH ON} перед всеми этими операциями


 
icWasya ©   (2013-11-11 14:14) [8]

С указателями, кроме {$POINTERMATH ON}, нужно учитывать, что если к указателю на байт прибавить единичку, то адрес изменится на один, а вот если к указателю на Integer прибавить единичку, то адрес изменится на четыре.


 
Вова   (2013-11-11 14:35) [9]

на 4 байта....или на 1 Integer.....на одну ячейку в общем.


 
Ega23 ©   (2013-11-11 14:45) [10]


> на 4 байта....или на 1 Integer.....на одну ячейку в общем.


На SizeOf(T)


 
DevilDevil ©   (2013-11-19 10:04) [11]

> Вова   (09.11.13 10:50) 

Я думаю проблема в том, что ты не понимаешь, как располагаются данные в битмапе. Строки битмапа идут снизу вверх, а не вверху вниз. Каждая строка выровнена на 4 байта.

Поэтому Start действительно указывает на начало битмапа. И для доступа к пикселю [X, Y] нужно Y переворачивать. Полагаю (p^) + Delta у тебя даёт отрицательное число



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

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

Наверх




Память: 0.49 MB
Время: 0.005 c
15-1397147091
Лактоза
2014-04-10 20:24
2014.11.16
не работает встраиваемый ютуб


15-1397257511
Германн
2014-04-12 03:05
2014.11.16
С днем космонавтики всех!


15-1397050081
ТНЕ картман
2014-04-09 17:28
2014.11.16
ряды


11-1255299161
Валера
2009-10-12 02:12
2014.11.16
Splash Screen. Как сделать ?


15-1394183038
Eleon
2014-03-07 13:03
2014.11.16
Интрнет-трафик