UniPixelViewer by Markus Hohmann

What is it?
-----------
It's a tool to quick convert a picture of several formats to PNG format / or to Amstrad CPC format.

Supported native file formats:
------------------------------
  PNG,JPG,BMP,GIF,PCX,TGA,ILBM,PBM,WEBP,
  CPS (Eye of the Beholder 1+2, DOS),
  VGA (Elvira, Mistress of the Dark 1+2, DOS),
  SCR (Amstrad CPC 16k and 31k Overscan),
  PAL (Amstrad CPC OCP Art Studio format),
  PAL (DOS, EoB 1+2),
  
Other formats:
--------------
You can theoretically import everything, you can select if this file is 8 bit, or ARGB, or other options, change width and height, offset in file, etc...
Probably you can grab some useful pictures from unknown file formats.

Quick-guide:
------------

- Import any picture source, fiddle with the settings
- When happy: Click "Export" - You find the exported picture in the app's folder/export.

Quick-guide Amstrad CPC image conversion:
-----------------------------------------
- Import any picture source, fiddle with the settings
- When happy, make sure, your picture is "Trimmed to CPC", if not, do it now
- In "Trim to CPC" mode, you can select "OVS" for 384x272 pixels overscan screen
  or keep it disabled for regular 320x200 pixels
- Enable "CPCize" and select the MODE. (R) stands for Rastered dithering. MODE 2 is NOT supported!
- Fiddle with palette and (B)rightness, (C)ontrast and (G)ain until you like the result
- When you click on "Export", a PNG file is generated, also all required CPC files, which are written on a .DSK image
- You can also load your own DSK file, supported formats are:
  DATA (SS 40), SYSTEM (SS 40), ROMDOS D2, ROMDOS D10, ROMDOS D20, ROMDOS D40,
  S-DOS, VORTEX, PARADOS 80, PARADOS 40D, PARADOS 41
- When you select "Keep until disk is full", the DSK is kept until it's capacity is used.
- When you use UniPixelViewer in the same folder, where you have WinApe installed,
  you can open the emulator from the tool, and it auto-loads the last action  on the DSK file.
- When WinApe.exe is not present, you can test your results with an embedded 6128 Plus emulator.


Quick-guide Amstrad CPC sprite editor:
--------------------------------------
- Make sure, your picture is already in CPC format (CPCized), see section "Quick-guide Amstrad CPC image conversion"
- When you see a button "Sprite Grabber", click on it.
- A new window opens which allows you to define the sprite coordinates.
- You can change the position, width and height, also change the number of sprites. (e.g. you want to grab 16 sprites from a picture)
- You can change the GAP bytewise between the sprites for X and Y.
- You see the sprite areas directly in the editor.
- When you want to create animated / compressed sprites, check with "Test anim" the size first.
- Select "Create Shapes" for uncompressed sprites or "Create animated Shape" for compressed, animated shapes
- Animated shapes cannot contain size information, this is fixed here!
- When you are happy with the displayed result, enter a filename in the sprite dialog and click "Generate code"
- All required files are generated, incl. Z80 assembler source and an example RSX command + BASIC file
  also stored to the DSK file.
- The sprite format is simple:
  DB <width>,<height>
  DB <sprdata>,<sprdata>,<sprdata>,<sprdata>,<sprdata>,....

Quick-guide Map Builder:
------------------------
The Map Builder allows you to grab tiles from a tileset.
To use it:
- Open it in UniPixelViewer, the button is in the top right area of the window.
- First: Use the Tile Grabber to import a tileset. This can be PNG, BMP, GIF, JPG, IFF, ILBM
- When you defined your tiles, click on "Generate tiles" and the Map Builder window is filled on the right side with the tileset.
- Now you can define your map size or import an already existing map which matches to your tileset
- Keyboard support: Use the following keys to control:
  W,A,S,D -> Select tile from tile map on the right side
  Arrow keys -> Move around (The tile cursor flashes)
  Space -> Place selected tile on tile cursor position
- Happy editing ;-)

Other things:
-------------
- I am sure the program has it's bugs, if so, you find me on Facebook, "Amstradiens" group.
- Feel free to use the "Donate" button, it always motivates me to code updates, new stuff, etc. :-)

Changelog (since v1.2):
-----------------------

v2.0:
- Added compressed sprites and animated (compressed) sprites
- Added animated GIF import with several import options (An animated GIF is imported as tile-sheet)
- Added a size-slider which resizes the imported image on the fly
- Changed the editor's behavior
- Updated the GUI
- Added R,G,B filter options
- Improved CPC rendering engine
- Added "Auto" trimming
- Fixed a bug in reading .VGA (AGOS format)
- Added manual editing functions like color exchange, edit pixels, flood fill
- Added PNG export for all sprites incl. info file for re-import (Generated sprite sheets)
- Several bugfixes

v1.9b+:
- Bugfix in BASIC code generation (Thanks to Eric Boulat for his bug report)

v1.9+:
- Added "Auto scroll" function to Map Builder.
- Added "Preview" feature to Sprite Grabber
- Sprite Grabber now auto-calculates CPC binary location adress
- CPC RSX code moved from &9000 to &A200 - 4.5kb more ram for sprite data
- Rewrote Sprite Grabber routine (the existing had too many bugs)
- Fixed several minor problems & bugs

v1.8+:
- Fixed a bug which kept the Sprite Grabber always create a new CPC disk image.
- Improved the Map Builder and added keyboard support. (Check the quick info)
- Fixed some minor bugs

v1.7+:
- Fixed a bug for Sprite Grabber in "Split" function (Thanks to Jack Ggp for his bug report)
- Added "Fill" to graphical options (Enable graphical options by right-click on a PEN when in CPC mode)
- Fixed a problem in generating tiles (Removed size information, thanks to MaitreJoe Ggp for his bug report)
- Map files have different names now to tile/sprite files to prevent overwriting (Added "-map" to filename)

v1.6b+:
- Fixed a bug which caused problems generating the proper sprite size
- Fixed a problem in Sprite Grabber

v1.6+:
- Added a Map Builder to create game maps. The export is stored as .CSV and also for Amstrad CPC users as 
  .BIN / .ASM file. Also a PNG of the entire map is exported.
- The Sprite Grabber now can remove duplicate tiles and also store as binary / asm, even if you override the size settings.
  The AMSDOS header is set to 0 as start address, you'll need to load it manually to the address you want.
  When the file is > than 45kb you probably will get into trouble ;-)
- When you grabbed sprites or tiles with the Sprite Grabber or Tile Grabber, an info file is stored with the same filename
  than the imported picture but with .sprite.inf or .tile.inf.
  The Grabber loads this file, if available, and restores the settings (Width, height, number etc...)
- Removed several bugs


v1.5+:
- Embedded a 6128 Plus emulator for quick testings of generated results
- Added "Split" to the sprite grabber, it defines a new sprite line.
  (Number is total amount of sprites, Split defines a new row)
- CPC File System now asks for permission to overwrite already existing files on loaded DSK
- Fixed some minor problems

v1.4+:
- Bugfix in renderer for 8 bit source images
- replaced the bugged DSK Filehandler by a new CPC File System, which understands more disk formats
  (Original Author: Renaud Helias)
  Supported formats: DATA (SS 40), SYSTEM (SS 40), ROMDOS D2, ROMDOS D10, ROMDOS D20, ROMDOS D40,
  S-DOS, VORTEX, PARADOS 80, PARADOS 40D, PARADOS 41

- Added the possibility to flip sprites vertically (by request)

v1.3b+:
- Bugfix in renderer
- Bugfix in Plus palette detection

v1.3+:
- Amstrad Plus format support added.
- Minor bugfixes

v1.2:
- WEBP support added
- Amstrad CPC screens can be crunched. These are stored as .CMP
- To load a usual packed CPC screen, use a code like this:
  MEMORY &3FFF:LOAD"filename.cmp":CALL &4000
- To load a packed overscan CPC screen, use a code like this:
  OPENOUT"D":MEMORY &1FF:LOAD"filename.cmp":CALL &A200