Форум: "Начинающим";
Текущий архив: 2013.09.01;
Скачать: [xml.tar.bz2];
ВнизНепонятное изменение значения переменной Найти похожие ветки
← →
Вова (2012-12-23 08:18) [0]Есть функция
function DrawKontur(var QP: TQuickPixels; QPStart: TQuickPixels;
x, y: integer): Boolean;
var
Pixel1: Cardinal;
Intensity: byte;
matr: array [1 .. 3, 1 .. 3] of byte;
i, j, x1, y1, x2, y2, x0, y0: integer;
begin
DrawKontur := true; // пока не используется и всегда истина.
if (x=0) or (y = 0) or (x = (QP.Width-1)) or (y = (QP.Height-1)) then
exit;// на границах не считаем
for i := (y - 1) to (y + 1) do
begin
for j := (x - 1) to (x + 1) do
begin
if (j < 0) or (j > (QP.Width-1)) or (i < 0) or (i > (QP.Height-1)) then
begin
continue;
end;
x2 := (j - (x - 1));
y2 := (i - (y - 1));
x1 := ((j -(x - 1))-1);
y1 := (i - (y - 1));
Pixel1 := QPStart.GetPixels24(j, i);
Intensity := getIntensity(Pixel1);
matr[x2, y2] := Intensity;
if x2 = 0 then
continue;
end;
end;
end;
которую я пытаюсь заставить работать, но наткнулся на полтергейст: при входе в функцию с x = 1 и y = 1 (ну то есть при первом же заходе, при котором мы попадаем в цикл). Заходим в цикл и в первом проходе имеем i = 0, но после выполнения matr[x2, y2] := Intensity; i вдруг становится равной 16711680, эта цифра напоминает значение переменной Pixel1 = 16777215 (Intensity = 255, x2=0,y2=0), а вопрос заключается в том что: КАК? и ПОЧЕМУ? и что делать?
Embarcadero RAD Studio XE, window 7 x64
← →
MBo © (2012-12-23 09:42) [1]Индекс y2 (к примеру) уже на первом шаге становится 0, и matr[x2, y2] портит воздух за пределами матрицы
Со включенной опцией проверки диапазонов это можно было бы отловить сразу.
P.S. Внутренний if не нужен
← →
Вова (2012-12-23 09:46) [2]matr: array [0 .. 2, 0 .. 2] of byte; да, оказывается дело в тос как объявлять массив.....
← →
Dimka Maslov © (2012-12-23 11:45) [3]Включи проверку индекса массива и будет счастье.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.09.01;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.003 c