Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: 8th: Kuvan skaalaus

jalski [02.07.2022 08:34:37]

#

Alla esimerkki kuvan skaalaamisesta käänteisen muunnos matriisin avulla:

: triangulate-rect
  nk:rect>pts4 4 a:close
  [0,1,2] a:@ nip ;   \ We need just the first half

: triangulate-image  \ image -- image a
  img:size 0 0 2swap 4 a:close \ img rect
  triangulate-rect ;

: map-x-before-y  \ a -- a
  ' a:open a:map >r 3 a:close r> a:+ ;

: calculate-transform  \ [[x11,y11],[x12,y12],[x13,y13]] [[x21,y21],[x22,y22],[x23,y23]] -- Tm
  map-x-before-y [1,1,1] dup >r a:+ [3,3] mat:new
  swap
  map-x-before-y r> a:+ [3,3] mat:new
  3 mat:ident mat:* mat:inv mat:* ;

: scale-image  \ img w h -- img
  2dup img:new >r                     \ src-img w h
  rot triangulate-image               \ w h src-img src-triangles
  r> triangulate-image                \ w h src-img src-triangle trgt-img trgt-triangle
  2 pick over                         \ w h src-img src-triangle trgt-img trgt-triangle src-triangle trgt-triangle
  calculate-transform mat:inv         \ w h src-img src-triangle trgt-img trgt-triangle inverse-transform
  nip rot drop                        \ w h src-img trgt-img inverse-transform

  ( >r
    ( r@ 2 a:close dup 2 pick mat:xform 4 pick swap a:open swap img:pix@ nip >r
      2 pick swap a:open swap r> img:pix! drop
    ) 0 6 pick n:1- loop rdrop
  ) 0 5 pick n:1- loop
  drop >r drop 2drop r> ;

: app:main
  "logo.png" img:new 194 194 scale-image "test.png" img:>file ;

jalski [09.07.2022 20:01:10]

#

Käänteistä muunnos matriisia apuna käyttämällä onnistuu kohtuullisen kivasti vaikka oma "image morphing" ohjelma.

Kuva omasta keskeneräiseksi joskus aikoinaan jääneestä tuotoksesta.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta