Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
ВнизПередача параметров. Найти похожие ветки
← →
Познающий глубины (2006-02-27 15:46) [0]Чем отличается и какой метод лучше использовать при передаче параметров.
type
pImage = ^TImage;
...
procedure TForm1.Proc(a: PImage);
или
procedure TForm1.Proc(a: TBitMap);
← →
Сергей М. © (2006-02-27 15:49) [1]С т.з. комплексной производительности - второй
С других т.з. это зависит от того что творится в теле Proc()
← →
Познающий глубины (2006-02-27 15:54) [2]В теле Proc() идут основательные вычесления с использованием канваса переданого изображения.
← →
Alkid © (2006-02-27 15:55) [3]Не вник в конструкцию pImage = ^TImage.
TImage - это ссылочный тип и передача в процедуру переменной типа
TImage есть передача ссылки (сиречь указателя) на объект. А так получается
указатель на указатель.
← →
Познающий глубины (2006-02-27 16:12) [4]А можете мне объяснить, почему такой код работает (на имадже отображается результат)
type
pImage = ^TImage;
...
Differ1(@image1, @image2, @image4)
...
procedure TForm1.Differ1(Source1, Source2, Dest: PImage);
var
i, j: integer;
begin
...
Dest^.Canvas.Pixels[i, j] := abs(Source2^.Canvas.Pixels[i, j] - Source1^.Canvas.Pixels[i, j]);
...
end;
А вот такой - нет.
...
Differ(image1.Picture.Bitmap, image2.Picture.Bitmap, image4.Picture.Bitmap);
...
procedure TForm1.Differ(Source1, Source2, Dest: TBitMap; DifferDouble: boolean=False);
begin
...
Dest.Canvas.Pixels[i, j] := abs(Source2.Canvas.Pixels[i, j] - Source1.Canvas.Pixels[i, j]);
...
end;
← →
Alkid © (2006-02-27 16:16) [5]В первом случае ты пишешь Dest^.
Dest имеет тип ^TImage => Выражение Dest^ тебе даёт значение типа TImage, на которое указывает Dest, что тебе и надо. То есть конструкция Dest^.canvas правильна. Иначе не правильно.
Вообще, тебе не нужно делать тип PImage = ^TImage. Ты тут делаешь масло маслянное.
Конструкция:
procedure xxx(x : TImage)
begin
x.canvas
end;
Более правильна, чем
procedure xxx(x : PImage)
begin
x^.canvas
end;
← →
wicked © (2006-02-27 16:19) [6]> Познающий глубины (27.02.06 16:12) [4]
> А можете мне объяснить, почему такой код работает (на имадже
> отображается результат)
> поскипано
> А вот такой - нет.
> поскипано
а они не эквивалентные.... неизвестно еще, что в imageX у тебя лежит....
← →
Познающий глубины (2006-02-27 16:28) [7]Я не понимаю почему вторая процедура не работает. Что BitMap не передается или что????
Дальше по коду я использую такие варианты, которые прекрасно функцианируют.
...
Binary(image1.Picture.Bitmap);
...
procedure TForm1.Binary(BMP: TBitMap);
var
i, j, g: integer;
begin
g := round((maxcolor(BMP) - mincolor(BMP)) / 2);
...
if getrvalue(BMP.Canvas.Pixels[i, j]) >= g then
BMP.Canvas.Pixels[i, j] := clWhite
else
BMP.Canvas.Pixels[i, j] := clBlack;
...
end;
И глядя на это я не могу понять ПОЧЕМУ принципиально такой же код не работает.
← →
Сергей М. © (2006-02-27 16:31) [8]Тебе накой ляд передавать ссылку на ссылку (как в случае с PImage)? Объясни ..
← →
Познающий глубины (2006-02-27 16:34) [9]Да мне собственно и не надо. Я же ведь спрашиваю, почему битмап не передается. Я и хочу избавится от передачи указателя.
← →
umbra © (2006-02-27 17:00) [10]что значит "не работает"? какая ошибка выдается?
← →
icWasya © (2006-02-27 17:04) [11]Тут надо чётко представлять, что Image1.Picture.Bitmap.Canvas и Image1.Canvas - это не совсем одно и то же. Хотя Борланд это тщательно скрывает. То есть пусть в начале работы Image1.Picture.Bitmap = Nil. Но если выполнить такой код Image1.Canvas.Pixels[0,0]:=clWhite или любую другую манипуляцию с Image1.Canvas, то создастся TBitmap с размерами TImage, присвоится Image.Picture, и с этих пор Image1.Picture.Bitmap.Canvas и Image1.Canvas - это одно и то же. Что и вызывает массу вопросов у неопытных юзеров.
← →
Познающий глубины (2006-02-27 18:07) [12]icWasya © (27.02.06 17:04) [11]
Спасибо. Действительно, я и сам примерно к такому же выводу пришел. Но теперь-то все ясно. Еще раз спасибо за обстоятельный ответ.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.014 c