package Ġcom . so y wiz . kor im . color Ċ Ċ import Ġcom . so y wiz . k mem .* Ċ import Ġcom . so y wiz . kor im . internal .* Ċ Ċ // Ġhttps :// en . wikipedia . org / wiki / Y UV Ċ inline Ġclass ĠY U VA ( val Ġvalue : ĠInt ) Ġ{ ĊĠĠĠ Ġconstructor ( y : ĠInt , Ġu : ĠInt , Ġv : ĠInt , Ġa : ĠInt ) Ġ: Ġthis ( pack Int Clamp ed ( y , Ġu , Ġv , Ġa )) ĊĊĠĠĠ Ġval Ġy Ġget () Ġ= Ġvalue . extract 8 ( 0 ) ĊĠĠĠ Ġval Ġu Ġget () Ġ= Ġvalue . extract 8 ( 8 ) ĊĠĠĠ Ġval Ġv Ġget () Ġ= Ġvalue . extract 8 ( 1 6 ) ĊĠĠĠ Ġval Ġa Ġget () Ġ= Ġvalue . extract 8 ( 2 4 ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠColor Format 3 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget Y ( v : ĠInt ): ĠInt Ġ= Ġv . extract 8 ( 0 ) Ġ// ĠL uma ĊĠĠĠĠĠĠĠ Ġfun Ġget U ( v : ĠInt ): ĠInt Ġ= Ġv . extract 8 ( 8 ) Ġ// ĠCh rom in ance 1 ĊĠĠĠĠĠĠĠ Ġfun Ġget V ( v : ĠInt ): ĠInt Ġ= Ġv . extract 8 ( 1 6 ) Ġ// ĠCh rom in ance 2 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget A ( v : ĠInt ): ĠInt Ġ= Ġv . extract 8 ( 2 4 ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget R ( v : ĠInt ): ĠInt Ġ= Ġget R ( getY ( v ), Ġget U ( v ), Ġget V ( v )) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget G ( v : ĠInt ): ĠInt Ġ= Ġget G ( getY ( v ), Ġget U ( v ), Ġget V ( v )) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget B ( v : ĠInt ): ĠInt Ġ= Ġget B ( getY ( v ), Ġget U ( v ), Ġget V ( v )) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpack ( r : ĠInt , Ġg : ĠInt , Ġb : ĠInt , Ġa : ĠInt ): ĠInt Ġ= ĠRGBA ( r , Ġg , Ġb , Ġa ). to Y U VA (). value ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Y ( r : ĠInt , Ġg : ĠInt , Ġb : ĠInt ): ĠInt Ġ= Ġ((( 0 . 2 9 9 Ġ* Ġr ) Ġ+ Ġ( 0 . 5 8 7 Ġ* Ġg ) Ġ+ Ġ( 0 . 1 1 4 Ġ* Ġb )). toInt ()). clamp 0 _ 2 5 5 () ĊĠĠĠĠĠĠĠ Ġfun Ġget U ( r : ĠInt , Ġg : ĠInt , Ġb : ĠInt ): ĠInt Ġ= Ġ(( 0 . 4 9 2 Ġ* Ġ( b Ġ* Ġget Y ( r , Ġg , Ġb ))). toInt ()). clamp 0 _ 2 5 5 () ĊĠĠĠĠĠĠĠ Ġfun Ġget V ( r : ĠInt , Ġg : ĠInt , Ġb : ĠInt ): ĠInt Ġ= Ġ(( 0 . 8 7 7 Ġ* Ġ( r Ġ* Ġget Y ( r , Ġg , Ġb ))). toInt ()). clamp 0 _ 2 5 5 () ĊĊĠĠĠĠĠĠĠ Ġfun Ġget R ( y : ĠInt , Ġu : ĠInt , Ġv : ĠInt ): ĠInt Ġ= Ġ(( y Ġ+ Ġ 1 . 1 4 Ġ* Ġv ). toInt ()). clamp 0 _ 2 5 5 () ĊĠĠĠĠĠĠĠ Ġfun Ġget G ( y : ĠInt , Ġu : ĠInt , Ġv : ĠInt ): ĠInt Ġ= Ġ(( y Ġ- Ġ 0 . 3 9 5 Ġ* Ġu Ġ- Ġ 0 . 5 8 1 Ġ* Ġv ). toInt ()). clamp 0 _ 2 5 5 () ĊĠĠĠĠĠĠĠ Ġfun Ġget B ( y : ĠInt , Ġu : ĠInt , Ġv : ĠInt ): ĠInt Ġ= Ġ(( y Ġ+ Ġ 2 . 0 3 3 Ġ* Ġu ). toInt ()). clamp 0 _ 2 5 5 () ĊĊĠĠĠĠĠĠĠ Ġfun ĠY UV to RGB ( out : ĠR g ba Array , Ġout Pos : ĠInt , Ġin Y : ĠByteArray , Ġin U : ĠByteArray , Ġin V : ĠByteArray , Ġin Pos : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( n Ġin Ġ 0 Ġuntil Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout [ out Pos Ġ+ Ġn ] Ġ= ĠY U VA ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( in Y [ in Pos Ġ+ Ġn ]. toInt () Ġand Ġ 2 5 5 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( in U [ in Pos Ġ+ Ġn ]. toInt () Ġand Ġ 2 5 5 ) Ġ- Ġ 1 2 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( in V [ in Pos Ġ+ Ġn ]. toInt () Ġand Ġ 2 5 5 ) Ġ- Ġ 1 2 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 xFF ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). to RGBA () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġclass ĠY u va Array ( val Ġints : ĠInt Array ) Ġ{ ĊĠĠĠ Ġval Ġsize Ġget () Ġ= Ġints . size ĊĠĠĠ Ġoperator Ġfun Ġget ( index : ĠInt ): ĠY U VA Ġ= ĠY U VA ( ints [ index ]) ĊĠĠĠ Ġoperator Ġfun Ġset ( index : ĠInt , Ġcolor : ĠY U VA ) Ġ= Ġrun Ġ{ Ġints [ index ] Ġ= Ġcolor . value Ġ} Ċ } Ċ Ċ fun ĠRGBA . to Y U VA (): ĠY U VA Ġ= ĠY U VA ( Y U VA . getY ( r , Ġg , Ġb ), ĠY U VA . get U ( r , Ġg , Ġb ), ĠY U VA . get V ( r , Ġg , Ġb ), Ġa ) Ċ fun ĠY U VA . to RGBA (): ĠRGBA Ġ= ĠRGBA ( Y U VA . getR ( y , Ġu , Ġv ), ĠY U VA . get G ( y , Ġu , Ġv ), ĠY U VA . getB ( y , Ġu , Ġv ), Ġa ) Ċ