package Ġh ambur g . rem me . lwjgl . texture Ċ Ċ import Ġh ambur g . rem me . lwjgl . util . resource URI Ċ import Ġorg . lwjgl . Buffer Utils . create ByteBuffer Ċ import Ġorg . lwjgl . st b . ST B Image . st bi _ info _ from _ memory Ċ import Ġorg . lwjgl . st b . ST B Image . st bi _ load _ from _ memory Ċ import Ġorg . lwjgl . system . Memory Stack Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Paths Ċ import Ġkotlin . experimental . and Ċ Ċ fun Ġload Image ( image File : ĠString ): ĠImage Ġ{ ĊĠĠĠ Ġval Ġraw Ġ= ĠreadFile ( image File ) ĊĠĠĠ ĠMemory Stack . stack Push (). use Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp Width Ġ= Ġit . malloc Int ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġp Height Ġ= Ġit . malloc Int ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġp Comp Ġ= Ġit . malloc Int ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġst bi _ info _ from _ memory ( raw , Ġp Width , Ġp Height , Ġp Comp ) ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġst bi _ load _ from _ memory ( raw , Ġp Width , Ġp Height , Ġp Comp , Ġ 0 ) !! ĊĊĠĠĠĠĠĠĠ Ġ// ĠPre - multiply Ġalpha Ġvalues Ġfor Ġcorrect ness Ġif Ġthere Ġis Ġan Ġalpha Ġchannel ĊĠĠĠĠĠĠĠ Ġif Ġ( p Comp . get () Ġ== Ġ 4 ) Ġpre multiply Alpha ( data , Ġp Width . get (), Ġp Height . get ()) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠImage ( p Width . get (), Ġp Height . get (), Ġp Comp . get (), Ġdata ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠreadFile ( file : ĠString ): ĠByteBuffer Ġ{ ĊĠĠĠ Ġval Ġuri Ġ= Ġresource URI ( file ) ĊĠĠĠ Ġval Ġbytes Ġ= ĠFiles . read All Bytes ( Paths . get ( uri )) ĊĠĠĠ Ġval Ġbuffer Ġ= Ġcreate ByteBuffer ( bytes . size ) ĊĠĠĠ Ġbuffer . put ( bytes ) ĊĠĠĠ Ġbuffer . flip () ĊĠĠĠ Ġreturn Ġbuffer Ċ } Ċ Ċ private Ġconst Ġval ĠFF Ġ= Ġ 0 xFF . to Byte () Ċ Ċ private Ġfun Ġpre multiply Alpha ( data : ĠByteBuffer , Ġw : ĠInt , Ġh : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġstride Ġ= Ġw Ġ* Ġ 4 ĊĠĠĠ Ġfor Ġ( y Ġin Ġ 0 Ġuntil Ġh ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil Ġw ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġy Ġ* Ġstride Ġ+ Ġx Ġ* Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalpha Ġ= Ġ( data [ i Ġ+ Ġ 3 ] Ġand ĠFF ) Ġ/ Ġ 2 5 5 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . put ( i Ġ+ Ġ 0 , ĠMath . round (( data [ i Ġ+ Ġ 0 ] Ġand ĠFF ) Ġ* Ġalpha ). to Byte ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . put ( i Ġ+ Ġ 1 , ĠMath . round (( data [ i Ġ+ Ġ 1 ] Ġand ĠFF ) Ġ* Ġalpha ). to Byte ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . put ( i Ġ+ Ġ 2 , ĠMath . round (( data [ i Ġ+ Ġ 2 ] Ġand ĠFF ) Ġ* Ġalpha ). to Byte ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ