Code
EnableExplicit
UseJPEGImageDecoder()
UsePNGImageDecoder()
;]=============================================================================
;-CONSTANTS
;[=============================================================================
#APP_NAME = "Image2HTML v1.0"
Enumeration
#WINDOW_ROOT
#TEXT_IMAGE_FILE
#BUTTON_CHOOSE_IMAGE
#PROGRESS_IMAGE_TO_HTML
#BUTTON_CONVERT_IMAGE
#IMAGE_FILE
#FILE_HTML
EndEnumeration
#HTML_PIXEL_WIDTH = "5"
#HTML_PIXEL_HEIGHT = "5"
;]=============================================================================
;-GLOBAL FLAGS / VARIABLES / STRUCTURES / ARRAYS
;[=============================================================================
Global FileName.s = ""
Define EventID.l
;]=============================================================================
;-PROCEDURES
;[=============================================================================
;Handle an error
Procedure HandleError(Result.l, Text.s)
If Result = 0
MessageRequester("Error", Text, #PB_MessageRequester_Ok)
End
EndIf
EndProcedure
;Select a file
Procedure.s SelectImage()
Protected Pattern.s = "All Files (*.*)|*.*"
Pattern.s + "|Bitmap Image (*.bmp)|*.bmp"
Pattern.s + "|Jpeg Image (*.jpg)|*.jpg"
Pattern.s + "|PNG Image (*.png)|*.png"
FileName.s = OpenFileRequester("Open a file for conversion", "", Pattern, 0)
If FileName <> ""
ProcedureReturn GetFilePart(FileName)
EndIf
EndProcedure
;Convert a 24bit colour value to a Hex string
Procedure.s RGBToHex(Colour.l)
Protected HexString.s = "#"
HexString + RSet(Hex(Red(Colour)), 2, "0")
HexString + RSet(Hex(Green(Colour)), 2, "0")
HexString + RSet(Hex(Blue(Colour)), 2, "0")
ProcedureReturn HexString
EndProcedure
;Convert the image
Procedure ConvertImage(FileName.s)
Protected x.l, y.l, MaximumProgressValue.q, Progress.q
If FileName <> ""
If LoadImage(#IMAGE_FILE, FileName)
MaximumProgressValue = ImageWidth(#IMAGE_FILE) * ImageHeight(#IMAGE_FILE)
SetGadgetAttribute(#PROGRESS_IMAGE_TO_HTML, #PB_ProgressBar_Maximum, MaximumProgressValue)
If CreateFile(#FILE_HTML, "Output.htm")
WriteStringN(#FILE_HTML, "<html>")
WriteStringN(#FILE_HTML, #TAB$ + "<head>")
WriteStringN(#FILE_HTML, #TAB$ + "</head>")
WriteStringN(#FILE_HTML, #TAB$ + "<body>")
WriteStringN(#FILE_HTML, #TAB$ + #TAB$ + "<table cellpadding=" + #DQUOTE$ + "0" + #DQUOTE$ + " cellspacing=" + #DQUOTE$ + "0" + #DQUOTE$ + ">")
StartDrawing(ImageOutput(#IMAGE_FILE))
For y = 0 To ImageHeight(#IMAGE_FILE) - 1
WriteStringN(#FILE_HTML, #TAB$ + #TAB$ + #TAB$ + "<tr>")
For x = 0 To ImageWidth(#IMAGE_FILE) - 1
WriteStringN(#FILE_HTML, #TAB$ + #TAB$ + #TAB$ + #TAB$ + "<td width=" + #DQUOTE$ + #HTML_PIXEL_WIDTH + #DQUOTE$ + " height=" + #DQUOTE$ + #HTML_PIXEL_HEIGHT + #DQUOTE$ + " bgcolor=" + #DQUOTE$ + RGBToHex(Point(x, y)) + #DQUOTE$ + "></td>")
Progress + 1
SetGadgetState(#PROGRESS_IMAGE_TO_HTML, Progress)
Next x
WriteStringN(#FILE_HTML, #TAB$ + #TAB$ + #TAB$ + "</tr>")
Next y
StopDrawing()
WriteStringN(#FILE_HTML, #TAB$ + #TAB$ + "</table>")
WriteStringN(#FILE_HTML, #TAB$ + "</body>")
WriteString(#FILE_HTML, "</html>")
CloseFile(#FILE_HTML)
RunProgram("Output.htm")
EndIf
EndIf
EndIf
SetGadgetState(#PROGRESS_IMAGE_TO_HTML, 0)
EndProcedure
;]=============================================================================
;-GEOMETRY
;[=============================================================================
HandleError(OpenWindow(#WINDOW_ROOT, 0, 0, 400, 70, #APP_NAME, #PB_Window_SystemMenu | #PB_Window_ScreenCentered), "Main window could not be created.")
HandleError(CreateGadgetList(WindowID(#WINDOW_ROOT)), "Gadget list for the main window could not be created.")
TextGadget(#TEXT_IMAGE_FILE, 10, 10, 270, 20, "", #PB_Text_Border)
ButtonGadget(#BUTTON_CHOOSE_IMAGE, 290, 10, 100, 20, "Browse...")
ProgressBarGadget(#PROGRESS_IMAGE_TO_HTML, 10, 40, 270, 20, 0, 100)
ButtonGadget(#BUTTON_CONVERT_IMAGE, 290, 40, 100, 20, "Convert")
;]=============================================================================
;-MAIN LOOP
;[=============================================================================
Repeat
EventID.l = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case #BUTTON_CHOOSE_IMAGE
SetGadgetText(#TEXT_IMAGE_FILE, SelectImage())
Case #BUTTON_CONVERT_IMAGE
ConvertImage(FileName)
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
End
;]=============================================================================
;-END
;==============================================================================