Вверх ↑
Этот топик читают: Гость
Администрация
Ответов: 15295
Рейтинг: 1519
#1: 2009-05-19 14:03:31 ЛС | профиль | цитата
   Схема ниже представляет из себя наглядную демонстрацию одного из способов комбинирования матричного фильтра и байтового поля по формуле:


rX = Sum([Bx+i y+j] * [Mij])
где rX - результирующий байт(в программе это один из компонентов цвета)
Sum() - сумма аргументов
Bx+i y+j - исходный байт поля в координатах (x+i,y+j)
Mij - коэффициент матричного фильтра в столбце i и строке j (числа от -1 до 1 )

code_13345.txt

меняя коэффециенты матричного фильтра можно получать красивые эффекты. По-умолчанию при движении мыши в области изображения рисуется желтый квадрат - если добавить другие фигуры различных цвет, то могут получаться еще более красочные пейзажи.
------------ Дoбавленo в 15.00:
при вот таких коэффициэнтах изображение похоже на бурлящее море фейерверка...

0.0 0.0  0.0
0.5 0.5 0.0
0.0 0.0 -0.1
------------ Дoбавленo в 15.47:
в схеме ниже изображение осцилоскопа, выводящего спект проигрываемого mp3 файла, помещается в пространстве байтового поля после чего получается стандартный эффект визуализации, который можно увидеть в некоторых медиапроигрывателях под названием "Огонь"


Add(MainForm,2953706,392,294)
{
Width=393
Height=275
link(onCreate,7930945:doEvent1,[])
}
Add(InlineCode,13082634,308,154)
{
WorkPoints=#6:doWork|8:doSetFlt|
EventPoints=#6:onWork|
VarPoints=#6:Bitmap|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|17: bmp:PBitmap;|47: flt:array[-1..1] of array [-1..1] of real;|53: procedure getPixel(y,x:integer; var r,g,b:byte);|9: public|23: fltData:THI_Event;|22: onWork:THI_Event;|5: |24: constructor Create;|51: procedure doWork(var _Data:TData; index:word);|51: procedure Bitmap(var _Data:TData; index:word);|53: procedure doSetFlt(var _Data:TData; index:word);|5: end;|0:|14:implementation|0:|52:type TArr = array[0..0] of record r,g,b:byte; end;|0:|31:constructor THiAsmClass.Create;|5:begin|12: inherited;|29: bmp := newbitmap(200, 200);|29: bmp.PixelFormat := pf24bit;|4:end;|0:|60:procedure THiAsmClass.doSetFlt(var _Data:TData; index:word);|16:var i,j:integer;|5:begin|22: for i := -1 to 1 do|23: for j := -1 to 1 do|44: flt[i][j] := ReadReal(_Data, fltData);|4:end;|0:|60:procedure THiAsmClass.getPixel(y,x:integer; var r,g,b:byte);|35:var maxx, minx, maxy, miny:integer;|18: i,j,c:integer;|18: rx,gx,bx:real;|5:begin|25: minx := max(0, x - 1);|38: maxx := min(Bmp.Width-1, x + 1); |25: miny := max(0, y - 1);|36: maxy := min(Bmp.Height-1, y + 1);|11: rx := 0;|11: bx := 0;|11: gx := 0;|27: for j := miny to maxy do|29: for i := minx to maxx do|40: with TArr(Bmp.ScanLine[j]^)[i] do|13: begin|42: rx := rx + flt[i - x][j - y]*r;|42: gx := gx + flt[i - x][j - y]*g;|42: bx := bx + flt[i - x][j - y]*b;|12: end;|44: c := (maxx - minx + 1)*(maxy - miny + 1);|18: r := round(rx);|18: g := round(gx);|23: b := round(bx); |4:end;|0:|58:procedure THiAsmClass.doWork(var _Data:TData; index:word);|20:var i, j:integer;|17: p:pointer;|21: rx,gx,bx:byte;|5:begin|33: for j := 0 to bmp.Height-1 do|34: for i := 0 to bmp.Width-1 do|13: begin|37: getPixel(j, i, rx, gx, bx);|43: with TArr(Bmp.ScanLine[j]^)[i] do|17: begin|22: r := rx;|22: g := gx;|29: b := bx; |16: end;|12: end;|28: _hi_onEvent(onWork, bmp);|4:end;|0:|58:procedure THiAsmClass.Bitmap(var _Data:TData; index:word);|5:begin|24: dtBitmap(_Data, bmp);|4:end;|0:|4:end.|
link(onWork,14265880:doDraw,[])
}
Add(PaintBox,16464149,238,154)
{
Left=25
Top=20
Width=220
Height=215
Point(onMouseDown)
Point(MouseX)
Point(MouseY)
Point(onMouseMove)
link(onBeforeDraw,13082634:doWork,[])
}
Add(Img_Bmp,14265880,371,154)
{
link(onDraw,14136332:doDraw,[(415,160)(415,114)(127,114)(127,272)])
link(Bitmap,16464149:Bitmap,[(377,142)(222,142)(222,198)(244,198)])
}
Add(Timer,9416628,175,154)
{
Interval=33
link(onTimer,16464149:doRefresh,[])
}
Add(Img_Rectangle,7686781,308,273)
{
Point2=655370
Point2AsOffset=0
Color=65535
Point(Point1)
link(Bitmap,9351547:Var2,[])
link(Point1,13678798:Point,[])
}
Add(PointXY,13678798,322,217)
{
link(X,11429199:Var3,[(328,205)])
link(Y,3232855:Var3,[(335,198)])
}
Add(Edit,15366742,448,49)
{
Left=280
Top=55
Width=25
Text="0.1"
}
Add(Edit,5059,511,49)
{
Left=305
Top=55
Width=25
Text="0.29"
}
Add(Edit,10304443,574,49)
{
Left=330
Top=55
Width=25
Text="0"
}
Add(Edit,5382071,448,91)
{
Left=280
Top=75
Width=25
Text="0"
}
Add(Edit,11317333,511,91)
{
Left=305
Top=75
Width=25
Text="0"
}
Add(Edit,16311021,574,91)
{
Left=330
Top=75
Width=25
Text="0"
}
Add(Edit,8047997,448,133)
{
Left=280
Top=95
Width=25
Text="0.2"
}
Add(Edit,4019761,511,133)
{
Left=305
Top=95
Width=25
Text="0.29"
}
Add(Edit,546085,574,133)
{
Left=330
Top=95
Width=25
Text="0.1"
}
Add(Button,10404142,427,245)
{
Left=290
Top=120
Caption="Set"
link(onClick,5688018:doWork2,[])
}
Add(MT_AddData,3351470,497,245)
{
Count=9
link(onAdd,13082634:doSetFlt,[(626,251)(626,34)(296,34)(296,167)])
link(Data1,15366742:Text,[(503,163)(454,163)])
link(Data2,5059:Text,[(510,163)(517,163)])
link(Data3,10304443:Text,[(517,163)(580,163)])
link(Data4,5382071:Text,[(524,184)(454,184)])
link(Data5,11317333:Text,[(531,184)(517,184)])
link(Data6,16311021:Text,[(538,184)(580,184)])
link(Data7,8047997:Text,[(545,205)(454,205)])
link(Data8,4019761:Text,[(552,205)(517,205)])
link(Data9,546085:Text,[(559,205)(580,205)])
}
Add(HubEx,5688018,469,238)
{
link(onEvent,3351470:doAdd,[])
}
Add(GetDataEx,9351547,301,231)
{
link(Data,13082634:Bitmap,[])
}
Add(Img_Text,2278945,245,266)
{
Font=[MS Sans Serif,12,0,65535,1]
Text="HiAsm"
Point(X)
Point(Y)
link(Bitmap,141080:Var2,[])
link(Y,14605233:reCalc,[(272,254)(240,254)(240,366)(209,366)])
}
Add(GetDataEx,11429199,252,196)
{
Angle=3
link(Data,16464149:MouseX,[(251,205)])
}
Add(GetDataEx,3232855,259,189)
{
Angle=3
link(Data,16464149:MouseY,[(258,198)])
}
Add(BASS_ChannelVisibleOcilloScope,14136332,140,266)
{
SoundStream="main"
Pen=16776960
FrameClear=1
link(onDraw,3559132:doNext,[])
link(WindowsHandle,141080:Var1,[(146,240)])
}
Add(BASS_Init,1840341,497,315)
{
link(onInit,9865709:doExecute,[])
}
Add(Hub,7930945,441,308)
{
link(onEvent1,5688018:doWork3,[(473,314)])
link(onEvent2,1840341:doInit,[])
}
Add(BASS_StreamCreateFile,8550269,609,315)
{
Name="main"
link(onCreate,10627324:doPlay,[])
}
Add(BASS_ChannelPlay,10627324,672,315)
{
Channel="main"
}
Add(GetDataEx,141080,238,231)
{
Angle=1
link(Data,9351547:Var1,[])
}
Add(Counter,3559132,196,266)
{
Max=200
link(onNext,2278945:doDraw,[])
}
Add(MathParse,14605233,196,322)
{
DataCount=1
MathStr="10*sin(%1/10) + 10"
Point(reCalc)
link(X1,3559132:Count,[])
}
Add(ODialog,9865709,553,315)
{
Filter="*.mp3|*.mp3"
StartDir=""
FileName=""
link(onExecute,8550269:doCreate,[])
}
(при запуске схемы обязательно указать "энергичный" mp3 файл)
карма: 27
10
файлы: 1code_13345.txt [4.6KB] [291]
Голосовали:Assasin, wasya, Валерий, Ravilr, kolyan21rus, filyaxxxcom, MAV, Konst, Andrey, Serja_mail
Разработчик
Ответов: 4698
Рейтинг: 426
#2: 2009-05-19 18:49:29 ЛС | профиль | цитата
Еще раз + не могу поставить, поэтому скажу так
Спасибо тебе Dilma за схему с проирывателем
------------ Дoбавленo в 18.53:
ЭТО ШУТКА???

карма: 10
0
файлы: 1uzer.png [11.6KB] [594]
Ответов: 1304
Рейтинг: 405
#3: 2009-05-19 22:05:29 ЛС | профиль | цитата
IC в массы .
Если не ошибаюсь многие видеофильтры(шумоподавители) работают на основе матричных фильтров.

карма: 3

0
Администрация
Ответов: 15295
Рейтинг: 1519
#4: 2009-05-20 15:32:52 ЛС | профиль | цитата
в продолжение темы - визуализация векторных полей (можно загрузить mp3 и мышой поверх картинки ездить)

code_13358.txt
карма: 27
8
файлы: 1code_13358.txt [7.1KB] [303]
Голосовали:Assasin, nesco, LainX, Валерий, filyaxxxcom, wasya, Konst, Serja_mail
Разработчик
Ответов: 4698
Рейтинг: 426
#5: 2009-05-20 16:05:20 ЛС | профиль | цитата
Прямо совсем как в Windows Media!!!
карма: 10
0
Ответов: 3851
Рейтинг: 159
#6: 2009-05-20 16:39:04 ЛС | профиль | цитата
но проц грузит совем по другому!
карма: 0
начавший
0
Администрация
Ответов: 15295
Рейтинг: 1519
#7: 2009-05-20 16:43:43 ЛС | профиль | цитата
на картинке 200х200 даже кривой алгоритм больше пары % не отнимет...
карма: 27
1
Голосовали:Serja_mail
Гость
Ответов: 17029
Рейтинг: 0
#8: 2009-05-21 00:10:33 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2021-05-22 09:21:23
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#9: 2009-05-21 00:30:21 ЛС | профиль | цитата
loft1436.serverloft.com, это ничем не отличается от http://dev.hiasm.com/index.html кроме того, что пример по ссылке сделан на самом HiAsm(в отличие от предложенного). К векторным ии матричным полям это так же не относится.
карма: 27
2
Голосовали:wasya, Serja_mail
Гость
Ответов: 17029
Рейтинг: 0
#10: 2009-05-21 17:46:15 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2021-05-22 09:21:23
карма: 0

0
Ответов: 223
Рейтинг: 24
#11: 2009-06-01 17:03:26 ЛС | профиль | цитата
Dilma, - хотел это сделать но не знал как-большое спасибо
code_13557.txt
карма: 0

0
файлы: 1code_13557.txt [7.5KB] [164]
Администрация
Ответов: 15295
Рейтинг: 1519
#12: 2009-06-01 18:28:41 ЛС | профиль | цитата
стоило на элементе сразу делать (если последняя версия стоит конечно)
карма: 27
1
Голосовали:Serja_mail
12
Сообщение
...
Прикрепленные файлы
(файлы не залиты)