UTFTConverter: Processing popular picture formats into .c or .raw format in RGB565

[ graphics, library, mit, program, text ] [ Propose Tags ]

About:

This package was created because I could not find a tool that can be used on UNIX systems to parse a picture into an array of RGB565 values and save them to a '.c' or '.raw' file. Both formats are used by the UTFT library to display pictures on to a TFT display.

This package includes, but not limited to, an executable which is made to be as identical as possible to the corresponding tool that is also downloaded with the UTFT library.

Usage:

./UTFTConverter <filespec> /c|r [/o <path>] [/t AVR|ARM|PIC32]

<filespec>:  File(s) to convert
parameters: /c            - Create output as .c array files
            /r            - Create output as .raw files
            /o <path>     - Set the output directory to <path>
            /t <platform> - Select target plaform
                            AVR   : Most Arduinos, Bobuion
                            ARM   : Arduino Due, Teensy, TI CC3200 LaunchPad
                            PIC32 : All chipKit boards

You must specify either /c or /r. All other parameters are optional.
If /o is ommited the current directory will be used for output.
If /t is ommited the target platform will be set to AVR.'

Supported formats:

The exported library is using JuicyPixels to convert incoming

  • '.gif'

  • '.png'

  • '.jpg' / '.jpe' / '.jpeg'

  • '.bmp'

  • '.tga'

and translates every pixel to a RGB565 format, which is a 4 digit hex number.

Library:

The only really reusable library is the Format.RGB565. It support the conversion from

  • RGB to RGB565 as (Word8, Word8, Word8) -> Int

  • Int to Hex as Int -> String

Example usage:

>>> toRGB565 (0, 0, 255)
31
>>> toRGB565Hex (0, 0, 255)
"001F"
>>> toHex 100
64
>>> to4Hex 100
"0064"
>>> to6Hex 100
"000064"

[Skip to Readme]

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.0.0, 0.1.0.1
Dependencies base (>=4.0 && <4.9), bytestring (>=0.10 && <0.11), directory (>=1.2 && <1.3), filepath (>=1.3 && <1.5), JuicyPixels (>=3.2 && <3.3), time (>=1.4 && <1.6), UTFTConverter (>=0.1 && <0.2) [details]
License MIT
Author Alexander Isenko
Maintainer Alexander Isenko <alex.isenko@googlemail.com>
Revised Revision 10 made by cirquit at 2015-10-07T19:05:41Z
Category Graphics, Text
Home page http://github.com/cirquit/UTFTConverter
Bug tracker http://github.com/cirquit/UTFTConverter/issues
Source repo head: git clone git://github.com/cirquit/UTFTConverter.git
Uploaded by cirquit at 2015-09-05T00:42:33Z
Distributions
Executables UTFTConverter
Downloads 4111 total (7 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2015-09-05 [all 1 reports]

Readme for UTFTConverter-0.1.0.0

[back to package description]

UTFTConverter

This is my take at an offline converter from the below defined formats to .c or .raw format.

I will try to make the tool as identical as possible to the corresponding tool at RinkyDink.

Usage:

./UTFTConverter <filespec> /c|r [/o <path>] [/t AVR|ARM|PIC32]

<filespec>:  File(s) to convert
parameters: /c            - Create output as .c array files
            /r            - Create output as .raw files
            /o <path>     - Set the output directory to <path>\n
            /t <platform> - Select target plaform
                            AVR   : Most Arduinos, Bobuion
                            ARM   : Arduino Due, Teensy, TI CC3200 LaunchPad
                            PIC32 : All chipKit boards\n

You must specify either /c or /r. All other parameters are optional.
If /o is ommited the current directory will be used for output.
If /t is ommited the target platform will be set to AVR.

Differences to the Windows tool:

  • You can specifiy as many files as you want, not only a directory (mydir/*.jpg still works, the shell does all the work for you)
  • If you specify a target platform while converting to .raw the platform will not be printed
  • If you specify a non-existing directory as target, it will be created
  • The length of the array is NOT preceded by 0x
  • You can use the flags in any order you want

Binaries

  • precompiled binary for Ubuntu distributions in bin/UTFTConverter_u (compiled on Linux Mint 17)
  • precompiled binary for Windows in bin/UTFTConverter_w.exe (compiled on Windows 7) (TODO)

Installation:

Step 1: Install the Glasgow Haskell Compiler and cabal OR the Haskell packaging tool

For Ubuntu distributions:

  • sudo apt-get install ghc
  • download the cabal-install.tar.gz from cabal
  • unpack the .tar.gz file, the cabal-install folder should include a bootstrap.sh
  • run ./bootstrap.sh

For any operation system:

Step 2: When you have ghc and cabal OR the Haskell Platform installed:

If you want the library AND the binary (the easier way) (still to be uploaded on hackage):

  • run cabal install UTFTConverter
  • the executable is now at ~/.cabal/bin/UTFTConverter

If you want to build it by hand:

  • download the JuicyPixels library - cabal install JuicyPixels
  • download the git repository - git clone http://github.com/cirquit/UTFTConverter
  • run make and the binary is in the same directory OR
  • run cabal install and the binary is in /dist/build/ and in your home directory under ~/.cabal/bin/UTFTConverter

To do:

  • maybe add resizing with a basic linear algorithm
  • I'm planning to make a simple API that you can start locally which accepts any below defined formats and responses with the parsed .raw file. (another project)
  • add stack support

About:

While working on a streaming project on the Arduino, I needed to convert .jpg's to the .c or .raw format on the fly and send them to the Arduino. Unfortunately, the tools that were included in the corresponding UTFT library were compiled for Windows and there was no public API to do so. That's why I thought it would be a nice first project, that some people could benefit from.