Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2013, 21:49   #1
Лилиана1992
Пользователь
 
Регистрация: 15.04.2013
Сообщений: 13
По умолчанию размытие изображения

наткнулась в одном из сайтов , вот на такой кусок кода. объясните пж для чего нам код на ассемблере?
function Set255(Clr : integer) : integer;
asm
MOV EAX,Clr
CMP EAX,254
JG @SETHI
CMP EAX,1
JL @SETLO
RET
@SETHI:
MOV EAX,255
RET
@SETLO:
MOV EAX,02;
tBufr.Height:=aBmp.Height+2;
tBufr.PixelFormat := pf24bit;
O := tBufr.ScanLine[0];
T := aBmp.ScanLine[0];
O[0] := T[0];
O[tBufr.Width - 1] := T[aBmp.Width - 1];
tBufr.Canvas.CopyRect(RECT(1,0,tBuf r.Width - 1,1),aBmp.Canvas,
RECT(0,aBmp.Height - 1,aBmp.Width,aBmp.Height-2));
O := tBufr.ScanLine[tBufr.Height - 1];
T := aBmp.ScanLine[aBmp.Height - 1];
O[0] := T[0];
O[tBufr.Width - 1] := T[aBmp.Width - 1];
tBufr.Canvas.CopyRect(RECT(1,tBufr. Height-1,tBufr.Width - 1,tBufr.Height),
aBmp.Canvas,RECT(0,0,aBmp.Width,1)) ;
tBufr.Canvas.CopyRect(RECT(tBufr.Wi dth-1,1,tBufr.Width,tBufr.Height-1),
aBmp.Canvas,RECT(0,0,1,aBmp.Height) );
tBufr.Canvas.CopyRect(RECT(0,1,1,tB ufr.Height-1),
aBmp.Canvas,RECT(aBmp.Width - 1,0,aBmp.Width,aBmp.Height));
tBufr.Canvas.CopyRect(RECT(1,1,tBuf r.Width - 1,tBufr.Height - 1),
aBmp.Canvas,RECT(0,0,aBmp.Width,aBm p.Height));
for x := 0 to aBmp.Height - 1 do begin
O := aBmp.ScanLine[x];
T := tBufr.ScanLine[x];
C := tBufr.ScanLine[x+1];
B := tBufr.ScanLine[x+2];
for y := 1 to (tBufr.Width - 2) do begin
O[y-1].rgbtRed := Set255(
((T[y-1].rgbtRed*ray[0]) +
(T[y].rgbtRed*ray[1]) + (T[y+1].rgbtRed*ray[2]) +
(C[y-1].rgbtRed*ray[3]) +
(C[y].rgbtRed*ray[4]) + (C[y+1].rgbtRed*ray[5])+
(B[y-1].rgbtRed*ray[6]) +
(B[y].rgbtRed*ray[7]) + (B[y+1].rgbtRed*ray[8])) div z
);
O[y-1].rgbtBlue := Set255(
((T[y-1].rgbtBlue*ray[0]) +
(T[y].rgbtBlue*ray[1]) + (T[y+1].rgbtBlue*ray[2]) +
(C[y-1].rgbtBlue*ray[3]) +
(C[y].rgbtBlue*ray[4]) + (C[y+1].rgbtBlue*ray[5])+
(B[y-1].rgbtBlue*ray[6]) +
(B[y].rgbtBlue*ray[7]) + (B[y+1].rgbtBlue*ray[8])) div z
);
O[y-1].rgbtGreen := Set255(
((T[y-1].rgbtGreen*ray[0]) +
(T[y].rgbtGreen*ray[1]) + (T[y+1].rgbtGreen*ray[2]) +
(C[y-1].rgbtGreen*ray[3]) +
(C[y].rgbtGreen*ray[4]) + (C[y+1].rgbtGreen*ray[5])+
(B[y-1].rgbtGreen*ray[6]) +
(B[y].rgbtGreen*ray[7]) + (B[y+1].rgbtGreen*ray[8])) div z
);
end;
end;
tBufr.Free;
end;
Лилиана1992 вне форума Ответить с цитированием
Старый 07.12.2013, 14:27   #2
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Этот код не полный и/или не правильно скопирован, ерунда какая-то... Что касается ассемблера, это контроль диапазона значений, на паскале это будет выглядеть так:
Код:
function Set255(Clr : integer) : integer;
begin
  Result:=Clr;
  if Clr>254 then Result:=255;
  if Clr<1 then Result:=2;
end;
Хотя, судя по названию функции и по логике, значение передаваемое в функцию должно приводиться к диапазону 0..255. Для чего тут ассемблер, для меня загадка, смысла в этом нет.
x128 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение изображения с ФРАГМЕНТОМ другого изображения egorka2134 Общие вопросы Delphi 8 13.08.2013 19:04
Классы. Чтение и создание .bmp изображения. Пропадает 1 пиксел при создании изображения. s-mumrik Visual C++ 3 12.04.2013 21:21
Как реализуется размытие картинки в вебе? kokon Помощь студентам 0 29.12.2010 13:24
Чтение изображения из базы данных, Вместо изображения - "System.Byte[]" ruelCrow Общие вопросы .NET 3 10.07.2008 23:29
Изображения в БД alikon1 БД в Delphi 3 08.10.2007 13:13