|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.12.2013, 21:49 | #1 |
Пользователь
Регистрация: 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; |
07.12.2013, 14:27 | #2 |
Форумчанин
Регистрация: 03.02.2010
Сообщений: 178
|
Этот код не полный и/или не правильно скопирован, ерунда какая-то... Что касается ассемблера, это контроль диапазона значений, на паскале это будет выглядеть так:
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сравнение изображения с ФРАГМЕНТОМ другого изображения | 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 |