module Hopfield.Images.ConvertImage (
loadPicture
, CBinaryPattern (..)
) where
import Data.Word
import Foreign.C
import Foreign.Ptr
import Foreign.Storable
import Foreign.Marshal.Array
data CBinaryPattern = CBinaryPattern {
cPatternSize :: Word32
, cPattern :: [Word32]
} deriving (Eq, Show)
foreign import ccall "convertImage.h load_picture" load_picture :: CString -> CInt -> CInt -> Ptr CBinaryPattern
instance Storable CBinaryPattern where
alignment _ = 8
sizeOf _ = (16)
peek ptr = do s <- (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
pattern_ptr <- (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
pattern_01s <- peekArray (fromIntegral s) pattern_ptr
return $ CBinaryPattern s pattern_01s
poke _ptr (CBinaryPattern _s _p) = error "Storable CBinaryPattern: poke not implemented"
loadPicture :: String -> Int -> Int-> IO CBinaryPattern
loadPicture path w h = do
cpath <- newCString path
peek (load_picture cpath (fromIntegral w) (fromIntegral h))