[Haskell-cafe] Data.Bitmap, readBitmap exception

Alexander Foremny alexanderforemny at gmail.com
Mon Jul 2 20:33:10 CEST 2012


Hello Balazs,

thank you for the explanation. It is clear to me now and obvious from
the description. I haven't had a detailed understanding of the BMP
format and interpreted pixel rectangles as BMP files which they are
clearly not. I then thought stb-image was necessary for compressed
image formats like PNG and but not for BMP.

Thanks you for the clarification. I'll try the maintainer the next
time directly, but above all else I'll be more thorough reading the
documentation.

Regards
Alexander Foremny

2012/6/29 Balazs Komuves <bkomuves at gmail.com>:
>
> 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
>
>



More information about the Haskell-Cafe mailing list