[Haskell-cafe] Data.Bitmap, readBitmap exception

Balazs Komuves bkomuves at gmail.com
Fri Jun 29 21:41:27 CEST 2012


Hello,

Author of Data.Bitmap here. The issue is caused by the fact that
Data.Bitmap does *not* support
bmp files at all. This should be clear from the documentation. The
functions you tried to used use
their own file format, which a really very simple format; they are only
added for simple experimentation.
(again, this is explicit in the docs). The same documentation points to the
stb-image [1] package,
 which supports loading of some common formats (png, jpg, bmp).

In general, I suggest that with package-specific question, unless it is a
widely used package,
mail the maintainer directly; you have better chance to get an answer that
way.

Regards,
Balazs

[1] http://hackage.haskell.org/package/stb-image

Hello,
>
> I am using bitmap-0.2 [1] to load a Bitmap file [2]. However, the
> following sample GHCi session fails for me.
>
> > Prelude Data.Bitmap Data.Bitmap.Pure.File> readBitmap "b.bmp" :: IO
> (Bitmap Word8)
> > *** Exception: Data/Bitmap/Internal.hs:(63,17)-(67,15): Non-exhaustive
> patterns in case
>
> I downloaded the sources of bitmap-0.2 from Hackage and modified the
> relevant function by appending the last line.
>
> > decodeCType :: CInt -> PixelComponentType
> > decodeCType k = case k of
> >   1 -> PctWord8
> >   2 -> PctWord16
> >   3 -> PctWord32
> >   4 -> PctFloat
> >   _ -> error $ "decodeCType: unexpected integer (" ++ show k ++ ")"
>
> With this modification the same GHCi session given above results in
> the following error.
>
> > Prelude Data.Bitmap Data.Bitmap.Pure.File> readBitmap "b.bmp" :: IO
> (Bitmap Word8)
> > *** Exception: decodeCType: unexpected integer (7077888)
>
> I don't have any idea where 7077888 comes from. Am I doing something
> wrong? Is my bitmap corrupted in some way? The number 7077888 has no
> apparent significance except that it is a perfect cube [3]. So I guess
> this is not a problem with endianness.
>
> In fact as far as I can tell `decodeCType` is only called on
> `(PixelComponent t => c_type t)` and `c_type t` only yields integer
> values in the (inclusive) range of 1 to 4. That is if I am not missing
> some orphaned instance.
>
> Could anyone please enlighten me what is happening and if I am doing
> something wrong?
>
> In case this is relevant: I am using bitmap-0.2 from Hackage with GHC
> 7.4.1 on a 3.2.20 kernel i686 architecture Linux.
>
> Regards,
> Alexander Foremny
>
> [1] http://hackage.haskell.org/package/bitmap
> [2] https://www.dropbox.com/s/pyutvni9vx6f6mo/b.bmp
> [3] http://www.wolframalpha.com/input/?i=7077888
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20120629/c197ca98/attachment.htm>


More information about the Haskell-Cafe mailing list