Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с TColor и Extended

57K
15 ноября 2010 года
roma_lir
10 / / 13.06.2010
Делаю оператор выделения границ - оператор Собеля
Код:
var a1,a2,a3,a4,a5,a6,a7,a8,j,i,y,x:integer;
    f:extended;
begin
     for i:=1 to image1.Picture.Bitmap.Width-1 do
         for j:=1 to image1.Picture.Bitmap.Height-1 do
         begin
             a1:=image1.Canvas.Pixels[i-1,j-1];
             a2:=image1.Canvas.Pixels[i,j-1];
             a3:=image1.Canvas.Pixels[i+1,j-1];
             a4:=image1.Canvas.Pixels[i+1,j];
             a5:=image1.Canvas.Pixels[i+1,j+1];
             a6:=image1.Canvas.Pixels[i,j+1];
             a7:=image1.Canvas.Pixels[i-1,j+1];
             a8:=image1.Canvas.Pixels[i-1,j];

             x:=(a3+2*a4+a5)-(a1+2*a8+a7);
             y:=(a1+2*a2+a3)-(a7+2*a6+a5);

             [COLOR="Red"]f:=sqrt(sqr(x)+sqr(y));[/COLOR]
             
             if f>255 then f:=255;
             image3.Canvas.Pixels[i,j]:=trunc(f);
         end;
end;

И в этом месте
 
Код:
f:=sqrt(sqr(x)+sqr(y));
выдает ошибку операции с плавающей точкой:"Іnvalid floating point operation".
Пробовал тут же использовать INT, ROUND, TRUNC.

Посоветуйте... Спасибо!
247
16 ноября 2010 года
wanja
1.2K / / 03.02.2003
А так пробовал?
f:=sqrt(sqr(extended(x))+sqr(extended(y)));
57K
16 ноября 2010 года
roma_lir
10 / / 13.06.2010
После этого
Цитата:
А так пробовал?
f:=sqrt(sqr(extended(x))+sqr(extended(y)));


говорит "Invalid typecast"

57K
16 ноября 2010 года
roma_lir
10 / / 13.06.2010
я все понял переменные: y,x:integer, а Integer = -2147483648..2147483647. Перегруз по integer и корень с отрицательного не может быть. Сделал для y,x:real и все ОК.
Тема закрыта. Спасибо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог