* * *    
Главная » Статьи » Код PB

Просмотров: 1151 | Дата: 08.05.2024 | Коментарии (0)

Преобразовать изображение в цветной таблицы HTML ...




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
;==============================================================================










Сайт посвящён языку программирования PureBasic — коммерческий компилятор языка программирования, использующего синтаксис BASIC. Предназначен для создания кроссплатформенных приложений для AmigaOS, Linux, Microsoft Windows, Windows NT и Mac OS X. Разработан компанией Fantaisie Software.