Code archives/Graphics/Bitmaps in DefData statements
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| This contribution provides utility and code for converting bitmaps into DefData statements which you can embed into your forum posts. This makes it possible to post your code as text-only without relying on external image hosting. ** DISCLAIMER ** This is only really suitable for small graphic files such as sprites and tiles due to the nature and size of the DefData statments. The code below is for a drag and drop utility that creates the DefData statements from the target image. Notice how the first line is a label that reflects the bitmap filename. This is used to locate the correct data when using multiple embedded images. Here is a quick sample from which you'll need to copy the DataToImage function. | |||||
SuperStrict
Import MaxGui.Drivers
Global window:TGadget = CreateWindow:TGadget("Blitzmax image to data utility. Drag file below...",60,60,320,320,Null,WINDOW_TITLEBAR|WINDOW_RESIZABLE|WINDOW_CLIENTCOORDS|WINDOW_ACCEPTFILES)
Global te:TGadget = CreateTextArea:TGadget( 10, 10, 300, 300, window:TGadget )
SetGadgetLayout( te, EDGE_ALIGNED, EDGE_ALIGNED, EDGE_ALIGNED, EDGE_ALIGNED )
Repeat
WaitEvent()
Select EventID()
Case EVENT_WINDOWACCEPT
Local file$ = EventExtra().tostring()
Print file$
Local image:TImage = LoadImage(file)
If image <> Null
Local txt$ = StripDir( file$ )
txt$ = Replace( txt$, ".", "_" )
txt$ = Replace( txt$, " ", "_" )
txt$ = "#" + txt$ + "~n"
txt$ :+ "DefData " + ImageWidth( image ) + ", " + ImageHeight( image ) + "~n"
Local tp:TPixmap = LockImage( image )
For Local y:Int = 0 To ImageHeight( image ) - 1
Local rowstring$ = "DefData ~q"
For Local x:Int = 0 To ImageWidth( image ) - 1
rowstring :+ Hex$( ReadPixel( tp, x, y ) )
Next
txt$ :+ rowstring + "~q~n"
Next
UnlockImage( image )
te.SetText( txt$ )
Else
Notify( "Invalid image file!" )
End If
Case EVENT_APPTERMINATE
End
Case EVENT_WINDOWCLOSE
Select EventSource()
Case window End
End Select
End Select
Forever |
Comments
| ||
| I'm always interested in looking at compression algorithms. Have to ask, in the first code, are you using a single hex-character (0-F) to represent a single pixel from a 16-color image ? |
| ||
| Simple answer - NO complex answer - look at the code data format: width, height color data packed alpha x00 red xFF green xFF blue xFF So there is no compression and no 16 colour image. its a 32 bit alpha Infant. if you look at the actual code it tells you in very simple terms what it is doing. Reading a line of data , then chunking it into 8 x width bytes (2 bytes per hex number) with is 0..255. it even uses word$ to further enforce what it is doing. :p |
Code Archives Forum