LED billboard texture generator

Advanced game related topics
User avatar
minimy
Enthusiast
Enthusiast
Posts: 619
Joined: Mon Jul 08, 2013 8:43 pm
Location: off world

LED billboard texture generator

Post by minimy »

This code is an draft version of a larger project I'm doing to automatically generate textures for games (or 3D design).
So far it has multiple generators spread across tabs.
Walls, techno walls, windows, character faces, character names, roads, doors, leds, etc.
Now in new version im using vectorial graphics because are better and with AA native.

Feel free to add new ones.

Hope share when finish all the job. over 3000 lines of code... :mrgreen:

I want to share the LED poster generator. (is not optimized and dirty because is a draft version)
I hope you like it.

They need to translate into your language as it is in Spanish.
Best regards!

Code: Select all


UsePNGImageDecoder()
UsePNGImageEncoder()

Global.i  font= LoadFont(#PB_Any,"Arial",10,#PB_Font_Bold)

  Procedure   Gadget(x,y,w,h, tipo.i=#PB_GadgetType_String, valor.s="", titulo.s="",flags=0, tooltip.s="")
    Protected.i tituw, valorw, gad,nh,dum
    If titulo
      titulo= " "+titulo+" "
      dum=CreateImage(#PB_Any,200,200)
      StartDrawing(ImageOutput(dum))
      DrawingFont(FontID(font))
      tituw= TextWidth(titulo)
      StopDrawing()
      FreeImage(dum)
;       tituw= Len(titulo)*11
      nh=h:If nh>25:nh=25:EndIf
      SetGadgetColor( TextGadget(#PB_Any,x,y,tituw,nh, titulo,#PB_Text_Border|#SS_CENTERIMAGE), #PB_Gadget_BackColor, $aaaaaa)
    EndIf
    Select tipo
      Case #PB_GadgetType_ComboBox
        gad= ComboBoxGadget(#PB_Any,x+tituw,y,w-tituw,h, flags)
        If valor
          For n=1 To CountString(valor,"|")
            AddGadgetItem(gad,-1, StringField(valor,n,"|"))
          Next n
            SetGadgetState(gad,0);CountGadgetItems(gad)-1)
        EndIf
        
      Case #PB_GadgetType_CheckBox
        gad= CheckBoxGadget(#PB_Any,x+tituw,y,w-tituw,h,valor, flags)
      Case #PB_GadgetType_TrackBar
        gad= TrackBarGadget(#PB_Any,x+tituw,y,w-tituw,h,0,100, flags)
        SetGadgetState(gad,Val(valor))
      Case #PB_GadgetType_Editor
        gad= EditorGadget(#PB_Any,x+tituw,y,w-tituw,h, flags)
        SetGadgetColor(gad,#PB_Gadget_BackColor,$bbffbb)
      Case #PB_GadgetType_String
        gad= StringGadget(#PB_Any,x+tituw,y,w-tituw,h,valor, flags)
        SetGadgetColor(gad,#PB_Gadget_BackColor,$bbffbb)
      Case #PB_GadgetType_Button
        gad= ButtonGadget(#PB_Any,x+tituw,y,w-tituw,h,valor, flags)
    EndSelect
;     SetGadgetFont(gad,FontID(font))
    If tooltip
      GadgetToolTip(gad,tooltip)
    EndIf
    ProcedureReturn gad
  EndProcedure
  Procedure   dibujaCanvas(canvas,img)
    Protected i= CreateImage(#PB_Any, ImageWidth(img),ImageHeight(img),32,#PB_Image_Transparent)
    StartDrawing(ImageOutput(i))
;       DrawingMode(#PB_2DDrawing_Default)
;         Box(0,0,OutputWidth(),OutputHeight(),$000000)
      DrawingMode(#PB_2DDrawing_AlphaChannel)
        Box(0,0,OutputWidth(),OutputHeight(),RGBA(0,0,0,0))
      DrawingMode(#PB_2DDrawing_AlphaBlend)
      If ImageDepth(img)=32
        DrawAlphaImage(ImageID(img),0,0)
      Else
        DrawImage(ImageID(img),0,0)
      EndIf
    StopDrawing()
    
    StartDrawing(CanvasOutput(canvas))
;       DrawingMode(#PB_2DDrawing_Default)
        Box(0,0,OutputWidth(),OutputHeight(),$ffffff)
;       DrawingMode(#PB_2DDrawing_AlphaChannel)
;         Box(0,0,OutputWidth(),OutputHeight(),$ffffffff)
      DrawingMode(#PB_2DDrawing_AlphaBlend)
      If ImageDepth(i)=32
        DrawAlphaImage(ImageID(i),0,0)
      Else
        DrawImage(ImageID(i),0,0)
      EndIf
    StopDrawing()
    FreeImage(i)
  EndProcedure
  Procedure   genImageLetter(img, bigpx.b=4, color.l=$00ffff, umbra.b=127, brillo.b=#False)
    Protected x,y,hh, w=ImageWidth(img), h=ImageHeight(img)
    Protected.l p, Dim px(ImageWidth(img),ImageHeight(img))
    StartDrawing(ImageOutput(img))
      For y= 0 To OutputHeight()-1
        For x= 0 To OutputWidth()-1
          If (Red(Point(x,y))+Green(Point(x,y))+Blue(Point(x,y)) ) /3 > umbral
            px(x,y)= 1
            hh= y*bigpx
          Else
            px(x,y)= 0
          EndIf
        Next x
      Next y
    StopDrawing()
    
    Protected.l c1,c2,c3,c4
    Protected.f s=0.9
    c4= RGB( Red(color)*s, Green(color)*s, Blue(color)*s )
    s=0.8
    c3= RGB( Red(color)*s, Green(color)*s, Blue(color)*s )
    s=0.7
    c2= RGB( Red(color)*s, Green(color)*s, Blue(color)*s )
    s=0.6
    c1= RGB( Red(color)*s, Green(color)*s, Blue(color)*s )
    
    Protected px_br=  CreateImage(#PB_Any,32,32,32,#PB_Image_Transparent)
    StartDrawing(ImageOutput(px_br))
      DrawingMode(#PB_2DDrawing_AlphaChannel)
        Box(0,0,OutputWidth(),OutputHeight(),0)
      DrawingMode(#PB_2DDrawing_AlphaBlend)
      For p= 0 To 14
        Circle(16,16,p, RGBA(Red(color),Green(color),Blue(color), (14-p)*0.75 ) )
      Next p
    StopDrawing()
  
    Protected px_on=  CreateImage(#PB_Any,32,32,24,0)
    StartDrawing(ImageOutput(px_on))
      Circle(16,16,14,c1)
      Circle(16,16,13,c2)
      Circle(21,11,9,c3)
      Circle(13,19,7,c4)
      Circle(16,16,6,c4)
    StopDrawing()
    
    Protected ibr,ion,ioff
    
    hh+(bigpx*4)
    img= CreateImage(#PB_Any,w*bigpx,h*bigpx)
;     ResizeImage(img,w*bigpx,h*bigpx)
    ibr=  CopyImage(px_br,  #PB_Any)
    ResizeImage(ibr,  bigpx*10,bigpx*10)
    ion=  CopyImage(px_on,  #PB_Any)
    ResizeImage(ion,  bigpx,bigpx)
    ioff= CopyImage(ion, #PB_Any)
    
    umbral= 85
    Protected r,g,b
    StartDrawing(ImageOutput(ioff))
      For y=0 To OutputHeight()-1
        For x=0 To OutputWidth()-1
          p= Point(x,y)
          r= Red(p)
          g= Green(p)
          b= Blue(p)
          r- umbral: If r<0:r=0:EndIf
          g- umbral: If g<0:g=0:EndIf
          b- umbral: If b<0:b=0:EndIf
          Plot(x,y,RGB(r,g,b))
        Next x
      Next y
    StopDrawing()
    StartDrawing(ImageOutput(img))
  ;     Box(0,0,OutputWidth(),OutputHeight(),$ffffff)
      Box(0,0,OutputWidth(),OutputHeight(),0)
    StopDrawing()
    ;imagen
    StartDrawing(ImageOutput(img))
      For y= 0 To H-1
        For x= 0 To W-1
          If px(x,y)=1
            DrawImage(ImageID(ion),x*bigpx,y*bigpx)
          Else
            DrawImage(ImageID(ioff),x*bigpx,y*bigpx)
          EndIf
        Next x
      Next y
    StopDrawing()
    ;brillo
    If brillo
    StartDrawing(ImageOutput(img))
      For y= 0 To H-1
        For x= 0 To W-1
          If px(x,y)=1
            DrawAlphaImage(ImageID(ibr), ((x*bigpx)+(bigpx/2))-(ImageWidth(ibr)/2), ((y*bigpx)+(bigpx/2))-(ImageWidth(ibr)/2))
          EndIf
        Next x
      Next y
    StopDrawing()
    EndIf  
    FreeImage(ioff)
    FreeImage(ibr)
    ProcedureReturn img
  EndProcedure
  
  Macro luminoso()
    If IsImage(ilum):FreeImage(ilum):EndIf  
    ilum= genImageLetter(imglum,8,colorLumi,127,lumi_radiacion)
    StartDrawing(CanvasOutput(lumi_canvas))
      DrawImage(ImageID(ilum),0,0)
    StopDrawing()
  EndMacro
  
win= OpenWindow(#PB_Any,0,0,800,550,"gen Assets v1.01 (Minimy 2024)",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
  panel=  PanelGadget(#PB_Any,0,0,800,548)
    ;{ LUMINOSO  
    AddGadgetItem(panel,-1,"Luminoso")
      lumi_pegaImg= ButtonGadget(#PB_Any,520,  0,270,30,"Pegar del portapapeles")
      lumi_color=   ButtonGadget(#PB_Any,520, 30,270,30,"Seleccion de color")
      lumi_glow=    ButtonGadget(#PB_Any,520, 60,270,30,"Radiación (Glow)",#PB_Button_Toggle)
      lumi_borra=   ButtonGadget(#PB_Any,520,120,270,30,"Borrador",#PB_Button_Toggle)
      lumi_tool=    Gadget(520,150,270,30,#PB_GadgetType_ComboBox,"Linea|Cuadrado|Circulo|Elipse|Cuadrado relleno|Circulo relleno|Elipse rellena|","Herramientas")
      lumi_undo=    ButtonGadget(#PB_Any,520,210,270,30,"Deshacer (Undo)")
      lumi_canvas=         CanvasGadget(#PB_Any,0,0,512,512);WindowWidth(win),WindowHeight(win) )
      imglum= CreateImage(#PB_Any,64,64)
      StartDrawing(ImageOutput(imglum))
        DrawingMode(#PB_2DDrawing_Transparent)
        DrawText((OutputWidth()-TextWidth("HOLA"))/2,0,"HOLA")
        DrawText((OutputWidth()-TextWidth("Mundo"))/2,10,"Mundo")
      StopDrawing()
      ilum= genImageLetter(imglum,8)
      StartDrawing(CanvasOutput(lumi_canvas))
        Box(0,0,OutputWidth(),OutputHeight())
        DrawImage(ImageID(ilum),0,0)
      StopDrawing()
      colorLumi= $00ffff
      b_lumiClipboard=  ButtonGadget(#PB_Any,520,450,270,30,"Copia la imagen al portapapeles")
      b_lumiSave=       ButtonGadget(#PB_Any,520,480,270,30,"Graba la imagen")
    ;}
    CloseGadgetList()
    
  lumiTinta= $ffffff
  
  AddWindowTimer(win,0,1000)
  Repeat
    event= WindowEvent()
    
    Select event
      Case #PB_Event_Timer
  ;       If EventTimer()=0
  ;       EndIf
        
      Case #PB_Event_Gadget
        EventGadget=  EventGadget()
        EventType=    EventType()
        Select EventGadget
          ;{ GRABA
          Case b_lumiClipboard
            If IsImage(ilum)
              SetClipboardImage(ilum)
            EndIf
          Case b_lumiSave
            file.s= SaveFileRequester("Graba imagen","","PNG|*.png",0)
            If file
              If LCase(GetExtensionPart(file))<>"png":file+".png":EndIf
;                 img0= getImage(lumi_canvas)
              If IsImage(ilum)
                SaveImage(ilum,file,#PB_ImagePlugin_PNG)
              EndIf
            EndIf
            
          ;{ LUMINOSO
          Case lumi_undo
            StartDrawing(ImageOutput(imglum))
              DrawImage(ImageID(lumiUndo),0,0)
            StopDrawing()
            If IsImage(dummy):FreeImage(dummy):EndIf
            dummy= CopyImage(imglum,#PB_Any)
            luminoso()
          Case lumi_borra
            If GetGadgetState(lumi_borra)
              lumiTinta= $0
            Else
              lumiTinta= $ffffff
            EndIf
          Case lumi_glow
            If IsImage(dummy):FreeImage(dummy):EndIf
            dummy= CopyImage(imglum,#PB_Any)
            lumi_radiacion= GetGadgetState(lumi_glow)
            luminoso()
          Case lumi_canvas
            If EventType= #PB_EventType_MouseMove
              If push
                x2= GetGadgetAttribute(lumi_canvas,#PB_Canvas_MouseX) * 0.125
                y2= GetGadgetAttribute(lumi_canvas,#PB_Canvas_MouseY) * 0.125
                Select GetGadgetText(lumi_tool)
                  Case "Linea"
                    StartDrawing(ImageOutput(imglum))
                      DrawImage(ImageID(dummy),0,0)
                      LineXY(x1,y1,x2,y2,lumiTinta)
                    StopDrawing()
                    luminoso()
                  Case "Cuadrado relleno"
                    StartDrawing(ImageOutput(imglum))
                      DrawImage(ImageID(dummy),0,0)
                      Box(x1,y1,x2-x1,y2-y1,lumiTinta)
                    StopDrawing()
                    luminoso()
                  Case "Circulo relleno"
                    StartDrawing(ImageOutput(imglum))
                      DrawImage(ImageID(dummy),0,0)
                      Circle(x1,y1,Abs(x2-x1),lumiTinta)
                    StopDrawing()
                    luminoso()
                  Case "Elipse rellena"
                    StartDrawing(ImageOutput(imglum))
                      DrawImage(ImageID(dummy),0,0)
                      Ellipse(x1,y1,Abs(x2-x1),Abs(y2-y1),lumiTinta)
                    StopDrawing()
                    luminoso()
                  Case "Cuadrado"
                    StartDrawing(ImageOutput(imglum))
                      DrawingMode(#PB_2DDrawing_Outlined)
                      DrawImage(ImageID(dummy),0,0)
                      Box(x1,y1,x2-x1,y2-y1,lumiTinta)
                    StopDrawing()
                    luminoso()
                  Case "Circulo"
                    StartDrawing(ImageOutput(imglum))
                      DrawingMode(#PB_2DDrawing_Outlined)
                      DrawImage(ImageID(dummy),0,0)
                      Circle(x1,y1,Abs(x2-x1),lumiTinta)
                    StopDrawing()
                    luminoso()
                  Case "Elipse"
                    StartDrawing(ImageOutput(imglum))
                      DrawingMode(#PB_2DDrawing_Outlined)
                      DrawImage(ImageID(dummy),0,0)
                      Ellipse(x1,y1,Abs(x2-x1),Abs(y2-y1),lumiTinta)
                    StopDrawing()
                    luminoso()
                EndSelect
              EndIf
            EndIf
            If EventType= #PB_EventType_LeftButtonDown
              x1= GetGadgetAttribute(lumi_canvas,#PB_Canvas_MouseX) * 0.125
              y1= GetGadgetAttribute(lumi_canvas,#PB_Canvas_MouseY) * 0.125
              If IsImage(dummy):FreeImage(dummy):EndIf
              If IsImage(lumiUndo):FreeImage(lumiUndo):EndIf
              lumiUndo= CopyImage(imglum,#PB_Any)
              dummy= CopyImage(imglum,#PB_Any)
              lumi_radiacion= GetGadgetState(lumi_glow)
              push= 1
            EndIf
            If EventType= #PB_EventType_LeftButtonUp
              push= 0
;               FreeImage(lienzo)
            EndIf
              
;               file.s= SaveFileRequester("Graba imagen","","PNG|*.png",0)
;               If file
;                 If LCase(GetExtensionPart(file))<>"png":file+".png":EndIf
; ;                 img0= getImage(lumi_canvas)
;                 If IsImage(ilum)
;                   SaveImage(ilum,file,#PB_ImagePlugin_PNG)
;                 EndIf
;               EndIf
;             EndIf
          Case lumi_tool
             
          Case lumi_color
            color= ColorRequester(colorLumi)
            If color>-1
              colorLumi= color
              If IsImage(dummy):FreeImage(dummy):EndIf
              dummy= CopyImage(imglum,#PB_Any)
;               lumi_radiacion= GetGadgetState(lumi_glow)
              luminoso()
            EndIf
          Case lumi_pegaImg
            If IsImage(img): FreeImage(img):EndIf
            img= GetClipboardImage(#PB_Any)
            If IsImage(img)
              ResizeImage(img,64,64);,#PB_Image_Raw)
              ilum= genImageLetter(img,8,colorLumi)
              StartDrawing(CanvasOutput(lumi_canvas))
                Box(0,0,OutputWidth(),OutputHeight())
                DrawImage(ImageID(ilum),0,0)
              StopDrawing()
            Else
              Debug "Error"
            EndIf
          ;}
        EndSelect
        
      Case #PB_Event_CloseWindow
        Break
    EndSelect
    
    Delay(1)
  ForEver

If translation=Error: reply="Sorry, Im Spanish": Endif
AZJIO
Addict
Addict
Posts: 2191
Joined: Sun May 14, 2017 1:48 am

Re: LED billboard texture generator

Post by AZJIO »

Some buttons don't work.
This is the case when you can use my source localization tool
User avatar
minimy
Enthusiast
Enthusiast
Posts: 619
Joined: Mon Jul 08, 2013 8:43 pm
Location: off world

Re: LED billboard texture generator

Post by minimy »

AZJIO wrote: Wed Feb 28, 2024 8:27 pm Some buttons don't work.
This is the case when you can use my source localization tool
Hello AZJIO, after test the code from this forum i see all is working right.

Pegar del portapapeles = paste from clipboard, only B/W images (no gray)
Borrador = active black ink to delete.
Graba = save

Draw with the mouse over the billboard with the selected tool (line, rectangle, etc...)

All is working. What no work for you?
If translation=Error: reply="Sorry, Im Spanish": Endif
AZJIO
Addict
Addict
Posts: 2191
Joined: Sun May 14, 2017 1:48 am

Re: LED billboard texture generator

Post by AZJIO »

I didn't understand how to manage some things. Now I see that everything works.
Post Reply