Mastring PNG format with PureBasic [Windows]

Share your advanced PureBasic knowledge/code with the community.
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4946
Joined: Sun Apr 12, 2009 6:27 am

Mastring PNG format with PureBasic [Windows]

Post by RASHAD »

Have fun with 1,4,8 PNG format transparent color or opaque with different values

Code: Select all

UsePNGImageDecoder()
UsePNGImageEncoder()
UseJPEGImageDecoder()
UseJPEG2000ImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()

Global nSize,*Buffer,*NewBuffer,IN_X,IN_Y,MColor,Opacity,Cont,ToolTxt,hBrush,Dim palette(0),Dim datax(0)

#MNS_NOCHECK = $80000000
#MIM_BACKGROUND = 2
#MIM_STYLE = $00000010
#MIM_APPLYTOSUBMENUS = $80000000 

Structure MENUINFO
   cbSize.l
   fMask.l
   dwStyle.l
   cyMax.l
   hbrBack.l
   dwContextHelpID.l
   dwMenuData.l
   CompilerIf #PB_Compiler_Processor  = #PB_Processor_x64
    PB_Alignment2.b[12]
   CompilerEndIf
EndStructure

CreateImage(0,145,128)
StartDrawing(ImageOutput(0))
  Box(0,0,145,128,$EAEAEA)
  Box(0,0,18,128,$AEAEAE)
StopDrawing()

b.LOGBRUSH
b\lbStyle = #BS_PATTERN
b\lbHatch = ImageID(0)
hBrush = CreateBrushIndirect_(b)

Procedure IsMouseOver(hWnd) 
    GetWindowRect_(hWnd,r.RECT) 
    GetCursorPos_(p.POINT) 
    Result = PtInRect_(r,p\y << 32 + p\x) 
    ProcedureReturn Result
EndProcedure

Procedure Tooltip()
    GetCursorPos_(t.POINT)
    mark = GadgetY(Cont,#PB_Gadget_ScreenCoordinate) 
    If t\y > mark And t\y < (mark+32)
        ResizeGadget(ToolTxt,45,20,68,24)
        SetGadgetText(ToolTxt,"Set bit Depth")
    ElseIf  t\y > (mark+32) And t\y < (mark+64)
        ResizeGadget(ToolTxt,45,52,60,24)
        SetGadgetText(ToolTxt,"New Image")
    ElseIf  t\y > (mark+64) And t\y < (mark+96)
        ResizeGadget(ToolTxt,45,84,64,24)
        SetGadgetText(ToolTxt,"Load Image")
    ElseIf  t\y > (mark+96) And t\y < (mark+128)
        ResizeGadget(ToolTxt,45,116,60,24)
        SetGadgetText(ToolTxt,"Set Palette")
    ElseIf  t\y > (mark+128) And t\y < (mark+160)        
        ResizeGadget(ToolTxt,45,148,44,24)
        SetGadgetText(ToolTxt,"Review")
    ElseIf  t\y > (mark+160) And t\y < (mark+192)        
        ResizeGadget(ToolTxt,45,180,66,24)
        SetGadgetText(ToolTxt,"Save Image") 
    EndIf
    SetForegroundWindow_(GadgetID(ToolTxt))
EndProcedure

Procedure Endian(val)
    !MOV Eax,dword[p.v_val]
    !BSWAP Eax
    ProcedureReturn
EndProcedure

Procedure Input_Req()
OpenWindow(2,IN_X-60,IN_Y+10,120,70,"Opacity 0 - 255",#PB_Window_BorderLess| #WS_DLGFRAME)
  SetWindowPos_(WindowID(2), #HWND_TOPMOST, 0, 0, 0, 0,#SWP_NOSIZE|#SWP_NOMOVE)
  SetWindowColor(2,MColor)
  TextGadget(500,0,0,120,20,"Opacity 0 - 255",#SS_CENTER|#SS_CENTERIMAGE)
  SetGadgetColor(500,#PB_Gadget_BackColor,MColor)
	StringGadget(510,20,20,80,20,"",#ES_CENTER|#ES_NUMBER |#WS_BORDER)
	SendMessage_(GadgetID(510),#EM_SETLIMITTEXT,3,0)
	ButtonGadget(520,40,45,40,20,"OK")
	AddKeyboardShortcut(2,#PB_Shortcut_Return,10)
	SetActiveGadget(510)
 Repeat
  Select WaitWindowEvent()
          Case #PB_Event_Menu
                 Select EventMenu()
                          Case 10
                                  Opacity = Val(GetGadgetText(510))
                                  Quit_2 = 1
                 EndSelect
                 
          Case #PB_Event_Gadget
                Select EventGadget()
                      Case 520
                            Opacity = Val(GetGadgetText(510))
                            Quit_2 = 1
                EndSelect
                
          Default
                BringWindowToTop_(WindowID(2))
           
  EndSelect
 Until Quit_2 = 1
 CloseWindow(2)
EndProcedure

Procedure SavePNG(Input$,Depth)     
     LoadImage(0,Input$)		
		*Buffer = EncodeImage(0,#PB_ImagePlugin_PNG,#PB_Image_FloydSteinberg,depth) 
		 		 				     	   
		 If depth = 8
		 			Dim palette(255)
					pos = *Buffer+41
					For i = 0 To 255
					     palette(i) = RGB(PeekA(pos),PeekA(pos+1),PeekA(pos+2))
					     pos + 3
					Next
		     nSize = MemorySize(*Buffer ) +268
		 ElseIf depth = 4
			 		Dim palette(15)
					pos = *Buffer+41
					For i = 0 To 15
					     palette(i) = RGB(PeekA(pos),PeekA(pos+1),PeekA(pos+2))
					     pos + 3
					Next
		      nSize = MemorySize(*Buffer ) +28
		 ElseIf depth = 1
			 		Dim palette(1)
					pos = *Buffer+41
					For i = 0 To 1
					     palette(i) = RGB(PeekA(pos),PeekA(pos+1),PeekA(pos+2))
					     pos + 3
					Next
		      nSize = MemorySize(*Buffer ) +14
		 EndIf
		 *NewBuffer = AllocateMemory(nSize)
EndProcedure

Procedure WindowProc(hWnd,uMsg,wParam,lParam)
  Result = #PB_ProcessPureBasicEvents
  Select uMsg
    Case #WM_MOVE
            If IsWindow(1)
                  ResizeWindow(1,WindowX(0)+WindowWidth(0)+20,WindowY(0) - 5,#PB_Ignore,#PB_Ignore)   
            EndIf            
   
    Case #WM_NCACTIVATE
            Result = 1

  EndSelect
  ProcedureReturn Result
EndProcedure

LoadFont(0,"Arial",7)
LoadFont(1,"Arial",12)

OpenWindow(0,0,0,355,425,"1/4/8 bit Transparent PNG",#PB_Window_SystemMenu|#PB_Window_ScreenCentered| #PB_Window_MaximizeGadget);| #PB_Window_SizeGadget)
SetWindowPos_(WindowID(0), #HWND_TOPMOST, 0, 0, 0, 0,#SWP_NOSIZE|#SWP_NOMOVE)
Delay(300)
SetWindowCallback(@WindowProc())
WindowBounds(0,310,250,#PB_Ignore,#PB_Ignore)
SetWindowColor(0,$C4C4C5)
Cont =ContainerGadget(#PB_Any,5,5,40,300,#PB_Container_Raised)
TB = CreateToolBar(0,GadgetID(Cont))
    IL = SendMessage_(TB, #TB_GETIMAGELIST , 0, 0)
    ImageList_SetIconSize_(IL,24,24)
    SetWindowLongPtr_(ToolBarID(0),#GWL_STYLE,GetWindowLongPtr_(ToolBarID(0),#GWL_STYLE)|#TBSTYLE_WRAPABLE |#CCS_NODIVIDER)
    SetClassLongPtr_(TB,#GCL_HBRBACKGROUND,GetStockObject_(#NULL_BRUSH))
    SetWindowTheme_(TB, @null.w, @null.w)
    ToolBarImageButton(1, CatchImage(0,?Options_8))
    ToolBarImageButton(2, CatchImage(0,?New_8))
    ToolBarImageButton(3, CatchImage(0,?Load_8))
    ToolBarImageButton(4, CatchImage(0,?Palette_8))
    ToolBarImageButton(5, CatchImage(0,?Review_8))
    ToolBarImageButton(6, CatchImage(0,?Save_8))
CloseGadgetList() 

 DisableToolBarButton(0,2,1)
 DisableToolBarButton(0,4,1)
 DisableToolBarButton(0,5,1)
 DisableToolBarButton(0,6,1)
 
 SendMessage_(TB, #TB_SETROWS, 10 | 1 <<16, @r.RECT)
 
 hdc = GetWindowDC_(0)
 MColor = GetPixel_(hdc,WindowX(0)+30,WindowY(0)+10)
 SetGadgetColor(Cont,#PB_Gadget_BackColor,MColor)
 
 ImageGadget(300,50,5,300,390,0,#PB_Image_Raised)
 ToolTxt = TextGadget(#PB_Any,0,0,0,0,"",#SS_CENTERIMAGE | #WS_BORDER |#SS_CENTER )
 SetGadgetColor(ToolTxt,#PB_Gadget_FrontColor,#Red)
 SetGadgetColor(ToolTxt,#PB_Gadget_BackColor,#Yellow)
 
  mi.MENUINFO
  mi\cbSize = SizeOf(MENUINFO)
  mi\fMask = #MIM_STYLE| #MIM_BACKGROUND |#MIM_APPLYTOSUBMENUS
  mi\dwStyle = #MNS_NOCHECK
  mi\hbrBack = hBrush
  
 If CreatePopupMenu(1) 
      MenuItem(10, "8  bit Depth") 
      MenuItem(11, "4  bit Depth") 
      MenuItem(12, "1  bit depth") 
  EndIf
  
  SetMenuInfo_(MenuID(1),mi)
  
  If CreateStatusBar(0, WindowID(0))
    AddStatusBarField(45)
    AddStatusBarField(155)
    AddStatusBarField(155)
  EndIf

  StatusBarText(0, 0, " 8 bit")
  StatusBarText(0, 1, "")
  StatusBarText(0, 2, "")
  
Depth = 8

Repeat
  Select WaitWindowEvent()
      
      Case #PB_Event_CloseWindow
            Quit = 1
            
      Case #WM_MOUSEMOVE
              GetCursorPos_(p.POINT) 
              If IsMouseOver(GadgetID(Cont)) 
                  Tooltip()
              Else
                  ResizeGadget(ToolTxt,0,0,0,0)
              EndIf
				      If IsWindow(1) And IsMouseOver(WindowID(1)) 				                           
											Color = GetPixel_(hdc,p\x,p\y)
											ScreenToClient_ (WindowID(1), @p)
											Gad = GetDlgCtrlID_(ChildWindowFromPoint_ (WindowID(1),p\y<< 32+p\x))
											If  Gad <= 255
											   ;StatusBarText(0, 2," Index : " + Str(Gad) + " RGB( "+Str(Red(color)) + ", " + Str(Green(color)) + " ," + Str(Blue(color))+" )")
											   StatusBarText(0, 2, " RGB( "+Str(Red(color)) + ", " + Str(Green(color)) + " ," + Str(Blue(color))+" )")
											   SetGadgetText(410," Index : " + Str(Gad) + "   RGB( "+ Str(Red(color)) + "  ," + Str(Green(color)) + " ," + Str(Blue(color)) +" )")
											EndIf  
						  EndIf
							
			Case #WM_LBUTTONDOWN     
							If IsWindow(1) And IsMouseOver(WindowID(1)) 
										GetCursorPos_(p.POINT)
										IN_X = p\x
										IN_Y = p\y
										ScreenToClient_ (WindowID(1), @p)
										Gad = GetDlgCtrlID_(ChildWindowFromPoint_ (WindowID(1), p\y<< 32+p\x))
										If Gad >= 0 And Gad < 256
      										If GetGadgetColor(Gad,#PB_Gadget_BackColor) < $7C7C7C
      										   SetGadgetColor(Gad,#PB_Gadget_FrontColor,#White)
      										Else
      										   SetGadgetColor(Gad,#PB_Gadget_FrontColor,#Black)
      										EndIf										
      
      										Input_Req()
      										
      										If Opacity > 255
      										    Opacity = 0
      										EndIf										        
      										SetGadgetText(Gad,Str(Opacity))							        
      										If Depth = 8
      													PokeA(*NewBuffer+821+gad,Opacity)
      										ElseIf Depth = 4
      										      PokeA(*NewBuffer+101+gad,Opacity)
      										ElseIf Depth = 1
      										      PokeA(*NewBuffer+59+gad,Opacity)
      										EndIf
      							EndIf
							 EndIf 
							 
			Case #WM_RBUTTONDOWN
			        If IsMouseOver(WindowID(0)) And IsImage(0)
				              GetCursorPos_(p.POINT)              
											Color = GetPixel_(hdc,p\x,p\y)
											StatusBarText(0, 1, " RGB( "+Str(Red(color)) + ", " + Str(Green(color)) + " ," + Str(Blue(color))+" )")
						  EndIf							   
      
      Case #PB_Event_Menu
          Select EventMenu()
            Case 1
                    Beep_(800,100)
                    ResizeGadget(ToolTxt,0,0,0,0)                    
                    SendMessage_(ToolBarID(0), #TB_GETRECT, 1, r.RECT) 
                    MapWindowPoints_(ToolBarID(0),0, r,2) 
                    DisplayPopupMenu(1,ToolBarID(0),r\left+36,r\top + 5)                     
              
           Case 2
                    Beep_(800,100)                   
                    ResizeGadget(ToolTxt,0,0,0,0)
                    SetGadgetState(300,0) 
										If IsWindow(1)
										    CloseWindow(1)
										EndIf
										Dim datax(0)
										If NoRun = 1
										    FreeMemory(*NewBuffer)
										EndIf
										 DisableToolBarButton(0,2,1)
										 DisableToolBarButton(0,4,1)
                     DisableToolBarButton(0,5,1)
                     DisableToolBarButton(0,6,1)
                    									
					 Case 3
					          Beep_(800,100)
				            ResizeGadget(ToolTxt,0,0,0,0)
										If  Depth = 8
										    Dim datax(267)
												Restore data_8bit
												For i = 0 To 267
												      Read.a a
												      Datax(i) = a
												Next
										ElseIf Depth = 4
										    Dim datax(27)
												Restore data_4bit
												For i = 0 To 27
												      Read.a a
												      Datax(i) = a
												Next
										ElseIf Depth = 1
										    Dim datax(11)
										    For i = 0 To 10
										          Read.a a
										          datax(i) = a
										    Next
										EndIf
										
									If IsWindow(1)
				              CloseWindow(1)
				          EndIf
				          
				          FileName$ = OpenFileRequester("SELECT IMAGE","","All supported formats| *.bmp;*.rle; *.jpg; *.jpeg; *.png;*.tif;*.tiff;*.tga| TGA image (*.tga)|*.tga| TIF image (*.tif)|*.tif| TIFF image (*.tiff)|*.tiff| PNG image (*.png)|*.png| BMP image (*.bmp)|*.bmp| RLE image(*.rle)|*.rle| JPEG image (*.jpg;*.jpeg)| *.jpg;*.jpeg",0)
									If 	 FileName$ <> ""				
    									SavePNG(FileName$,Depth)
    																			
    									If Depth = 8												
    											CopyMemory(*Buffer,*NewBuffer,813)
    											CopyMemory(?data_8bit, *NewBuffer+813,267)
    											CopyMemory(*Buffer+814,*NewBuffer+1082,(nSize -1081))											
    									ElseIf Depth = 4												
    										  CopyMemory(*Buffer,*NewBuffer,93)
    											CopyMemory(?data_4bit, *NewBuffer+93,27)
    											CopyMemory(*Buffer+94,*NewBuffer+122,(nSize-121))
    									ElseIf Depth = 1
    									    CopyMemory(*Buffer,*NewBuffer,51)
    											CopyMemory(?data_1bit, *NewBuffer+51,11)
    											CopyMemory(*Buffer+52,*NewBuffer+66,(nSize-63))						
    									EndIf										
    									FreeMemory(*Buffer)
    									
    									LoadImage(0,FileName$)
    									ResizeWindow(0,#PB_Ignore,#PB_Ignore,ImageWidth(0)+60,ImageHeight(0)+38)
    									ResizeGadget(300,#PB_Ignore,#PB_Ignore,ImageWidth(0),ImageHeight(0)+10)
    
                      SetGadgetState(300,ImageID(0))
                      DisableToolBarButton(0,2,0)
                      DisableToolBarButton(0,4,0)
                EndIf
                    
            Case 4
                     Beep_(800,100)
                     ResizeGadget(ToolTxt,0,0,0,0)
                     OpenWindow(1,WindowX(0)+WindowWidth(0)+20,WindowY(0) - 5,370,435,"", #PB_Window_Invisible|#PB_Window_BorderLess)
                     SetWindowPos_(WindowID(1), #HWND_TOPMOST, 0, 0, 0, 0,#SWP_NOSIZE|#SWP_NOMOVE| #SWP_NOACTIVATE)
                     SetWindowColor(1,MColor)
                     UseGadgetList(WindowID(1))
                     TextGadget(400,0,8,WindowWidth(1),20,"Palette Table",#SS_CENTERIMAGE | #SS_CENTER)
                     SetGadgetFont(400,FontID(1))
                     SetGadgetColor(400,#PB_Gadget_BackColor,MColor)
                     TextGadget(410,10,WindowHeight(1)-40,350,22,"",#SS_CENTERIMAGE | #SS_CENTER| #WS_BORDER)
                     SetGadgetColor(410,#PB_Gadget_BackColor,#White)
                     SetGadgetColor(410,#PB_Gadget_FrontColor,#Red)
                     If Depth = 8
                         x = 10 : y =33
                         For i = 0 To 255 Step 16
                               For k =  i To  i+15 
                                 TextGadget(k,x,y,20,20,"",#SS_NOTIFY|#SS_CENTERIMAGE | #SS_CENTER| #WS_BORDER):x+22
                                 SetGadgetFont(k,FontID(0))
                                 SetGadgetColor(k,#PB_Gadget_BackColor,palette(k))
                               Next
                               x = 10
                               y + 22
                          Next
                      ElseIf Depth = 4
                         ResizeWindow(1,#PB_Ignore,#PB_Ignore,#PB_Ignore,110)
                         ResizeGadget(410,10,WindowHeight(1)-40,350,22)
                         x = 10 : y =33
                         For i = 0 To 15
                                 TextGadget(i,x,y,20,20,"",#SS_NOTIFY|#SS_CENTERIMAGE | #SS_CENTER| #WS_BORDER):x+22
                                 SetGadgetColor(i,#PB_Gadget_BackColor,palette(i))
                         Next
                      ElseIf Depth = 1
                          ResizeWindow(1,#PB_Ignore,#PB_Ignore,#PB_Ignore,110)
                          ResizeGadget(410,10,WindowHeight(1)-40,350,22)
                          x = 10 : y =33
                          For i = 0 To 1
                                 TextGadget(i,x,y,20,20,"",#SS_NOTIFY|#SS_CENTERIMAGE | #SS_CENTER| #WS_BORDER):x+22
                                 SetGadgetColor(i,#PB_Gadget_BackColor,palette(i))
                          Next
                      EndIf
                      HideWindow(1,0)
                      DisableToolBarButton(0,5,0)                      
                      DisableToolBarButton(0,6,0)
            
            Case 5
                    Beep_(800,100)
                    ResizeGadget(ToolTxt,0,0,0,0)
                    If Depth = 8
                          *MemoryID = AllocateMemory(259)
													CopyMemory(*NewBuffer+817, *MemoryID,259)
    											CRC32 = CRC32Fingerprint(*MemoryID,260)
    											FreeMemory(*MemoryID)
    											FillMemory(*NewBuffer+1077,4,Endian(CRC32),#PB_Long )
    								ElseIf Depth = 4
     								      *MemoryID = AllocateMemory(19)
													CopyMemory(*NewBuffer+97, *MemoryID,19)
    											CRC32 = CRC32Fingerprint(*MemoryID,20)
    											FreeMemory(*MemoryID)
    											FillMemory(*NewBuffer+117,4,Endian(CRC32),#PB_Long )
    							  ElseIf Depth = 1
    							        *MemoryID = AllocateMemory(5)
													CopyMemory(*NewBuffer+55, *MemoryID,5)
    											CRC32 = CRC32Fingerprint(*MemoryID,6)
    											FreeMemory(*MemoryID)
    											FillMemory(*NewBuffer+61,4,Endian(CRC32),#PB_Long )
										EndIf
										
										nImage = CatchImage(#PB_Any,*NewBuffer)
										SetGadgetState(300,ImageID(nImage))										
            
            Case 6
                      Beep_(800,100)
                      ResizeGadget(ToolTxt,0,0,0,0)	    
    									Path$ = GetHomeDirectory()
    									Name$ = GetFilePart(FileName$ ,#PB_FileSystem_NoExtension) +"_"+Str(Depth)+"bit"
    									sName$ = Path$ + Name$ +".png"
                      If FileSize(sName$) > 0
                          del = MessageRequester("Error","File Exist,Delete?",#PB_MessageRequester_YesNo|#MB_ICONERROR)
                          If del = #PB_MessageRequester_Yes
                             DeleteFile(sName$,#PB_FileSystem_Force)
                             OpenFile(0,sName$ )
											            WriteData(0, *NewBuffer , nSize)
									           CloseFile(0)
                             MessageRequester("Info","New Image saved successfully...",#PB_MessageRequester_Ok|#MB_ICONINFORMATION)
                         EndIf
                      ElseIf FileSize(sName$) = -1
                             OpenFile(0,sName$ )
											            WriteData(0, *NewBuffer , nSize)
									           CloseFile(0)
                             MessageRequester("Info","New Image saved successfully...",#PB_MessageRequester_Ok|#MB_ICONINFORMATION)
                      EndIf

                    
            Case 10
                     Beep_(800,100)
                     Depth = 8
                     StatusBarText(0, 0, " "+Str(Depth)+" bit") 
            
            Case 11
                     Beep_(800,100)
                     Depth = 4
                     StatusBarText(0, 0, " "+Str(Depth)+" bit") 
            
            Case 12
                     Beep_(800,100)
                     Depth = 1
                     StatusBarText(0, 0, " "+Str(Depth)+" bit") 
                    

           EndSelect             
  EndSelect 

Until Quit = 1
End


DataSection
data_8bit:
	Data.a $00, $00, $01, $00, $74, $52, $4E, $53, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF    ;iNDEX  0 = data8(8)  256 Palette
	Data.a $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF 
	Data.a $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF 
	Data.a $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF 
	Data.a $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF 
	Data.a $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF 
	Data.a $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF 
	Data.a $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF 
	Data.a $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF 
	Data.a $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF 
	Data.a $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
	Data.a $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF 
	Data.a $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF 
	Data.a $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF 
	Data.a $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF 
	Data.a $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF 
	Data.a $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00
	
data_4bit:
	Data.a $00, $00, $00, $10, $74, $52, $4E, $53, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF     ;iNDEX  0 = data4(9)    16 Palette
	Data.a $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00
	
data_1bit:
  Data.a $00, $00, $00, $02, $74, $52, $4E, $53, $FF, $FF,$00,$00
  
Options_8:
   Data.q $0A1A0A0D474E5089,$524448490D000000,$1800000018000000,$3D77E00000000608,$4144493E070000F8
   Data.q $5450099695C74854,$0BC04B5387C61E47,$444D1A0A20882A4B,$C2872ADC8225AAC2,$51C3904720202C20
   Data.q $401025C880AC8F0A,$87DC2640C7091104,$A28888C70CC70C82,$0CA330C0888A0078,$998034B86CAB2831
   Data.q $B5DCB1589267B6F9,$EFFDDD7EABF55792,$051EFDDFFAFBDEFE,$B325151511FFE500,$E8577B93EE9A2DD1
   Data.q $E93C3B7A1F0DBF43,$81B1A220716DA077,$C2A0F83FD8D4F94D,$BE752BF35252E41B,$8C54AE5D9404F4E7
   Data.q $12DB11EBAF9C8C8C,$ECB11FAB0C441EC3,$EF4B06C7EEAE9C01,$4A1F8C94654B8A84,$0B73D383075BF334
   Data.q $18202D3F26A7A735,$CEE5F01EE3D9467A,$BE8CDB66678E7CD0,$D3135F7B7D44A9FB,$3CC3B5A777FB97D3
   Data.q $E8C36E17DD8496F5,$118773CED0D9A304,$CFFDF4ADF88D7CED,$337DBC57C38283B1,$D6C51E3CF805BFFD
   Data.q $8E2D72511363A683,$F2908A7E6E4A203D,$EBE3C7D79983B9AE,$1320B01DB94E85FB,$BE276E4B86DEA79B
   Data.q $1E338D23D5FBEBAD,$C2F6670D8927D753,$9AF46858FB0A50E0,$96BC402C7D5FAFD7,$3D4B9BFF3235D2FB
   Data.q $1F7193618FE543A2,$4BFC1E46B88AC421,$60F7E956EA4D607B,$13C55040EACDB049,$CEB58930E3E26D9C
   Data.q $DF9FE1FB317F87B8,$F67AC6F0F7334D05,$AA0AF2E111E102C7,$4F153C954FCC5CEB,$B09DD9BD81D99564
   Data.q $B27B03A32AC277A3,$92C044363175253A,$B3890D82E9CBEDB4,$E93FDF508EF17316,$363637B7CB45BCC6
   Data.q $51445C5A50247F48,$DA31D0C35144BA5E,$CBB0DD191C0EEB39,$7BB7F0FB9A812079,$4B66DF7C3CE4EFFA
   Data.q $A9C6A4DB047BC970,$90D4D1AE3937ABC5,$A6241BE1F87EE9ED,$FB9A06E75DE457D1,$5A15D1551D6B7EC5
   Data.q $3C6070C7FC97003D,$B6A792A03D0FE382,$61AE77EAD91DA988,$E4F352559AED2D1B,$3C6247DBEE20223E
   Data.q $B6EF2795D4E09F8B,$CE89CA8CF06BBED2,$E1497A545A3EEC6D,$8C7EB64DF502C0BD,$AE1711FCDDDF73BB
   Data.q $63DE4383C988210F,$1E624C89C2F41738,$32BE57CD74BC3959,$B2DB2D29C9EB160B,$A4CB724DAC6D9B72
   Data.q $88D8923827E93E73,$175C2F632348A7FA,$76369D9FF99E21C0,$BDAA58137E89101A,$10D671C9649DD5C5
   Data.q $4B87EE2B70785768,$05DE8FB9495C1F51,$A8AB96CB2961FD9D,$9430ED1BCB9B9858,$8CC0FD3AE57CB85F
   Data.q $C1E129702782E73A,$AA1C02654E0878BE,$5893D8C375638E79,$405EF5A8EA86DAFF,$227B8CFB5716ED79
   Data.q $2770B84ADC3E72F7,$07107CA3C2E5281C,$DBB61116EBA1BAF2,$17CBE8F0713CEF7A,$7E05EA96F5EB9594
   Data.q $2EA29F0A7C2D445F,$8C23A46741D3D1A4,$82A6796186844E5E,$477EEB6059FC3808,$E25D780295D7F3E2
   Data.q $B521083D2E209BC3,$BA8BB9BA2E9F587C,$BE3E942FD4D8D57F,$BC65598360C6DA40,$94E54464ACF4B3DB
   Data.q $8099DAFC61CD75E1,$F3FA825EA4BEF3EA,$72F3E7BA6E71739E,$25142966666715B3,$56F6188F3D432D55
   Data.q $7B3F4DF15687E4BF,$8AEF004AB070F397,$F6D4CE13F4D53867,$B227DBAEEB131D0B,$6896DE3CCF19FF7C
   Data.q $04B6B18899DB7DC5,$610A9EA6F0A26BF0,$8ACC302755043E83,$DE82AB863A4F6CC2,$A46FAAC13AD4EDF9
   Data.q $D235A92929252F88,$382FBCBB5A7A72B2,$65F08FF57F803EE5,$8DFE3709948FC30E,$B9210CE648235BAC
   Data.q $716D985E188F1FA1,$37024E8F03BAEE02,$C04187811B0D0376,$CB28C5EE6E882083,$BAAAB83D44CBC66F
   Data.q $AACC523870E14296,$87465A26EDBD592A,$FD68E10C3746AE92,$042008493F68B20B,$57610C65A2225E73
   Data.q $6D7CB18591917147,$9041565773135EA0,$12178C36C66E03AD,$6D42D2C44156EBDB,$65168AAAF5BEBAF0
   Data.q $9A9A910B25F325A5,$86AC3CA671E7AB2A,$25FEA4719FF6A487,$051CA4A38D410902,$E79431ECBE02FD8D
   Data.q $7B1CD3042AB06344,$94846D9FD1EB3888,$FD0B47C6BD48CBC2,$1E9AE8846F2F2630,$CF8EC9AD7393EC04
   Data.q $8F880892EDA9362D,$5B17CEA1164D9565,$063CD13823590227,$269A3B2570A7CABF,$D12671A057A6BF4E
   Data.q $5C3B1385E01C7C56,$387E993807F96C21,$705131CC038134DC,$DDA076E968DDE30A,$F4178D79E1441000
   Data.q $CE92920448B92B57,$1D6CDD55507590CA,$BAA922F29D6D4D4D,$59C381BABB5CEFCD,$3863AB89C8D638AB
   Data.q $4DE861B9951A6D7A,$16C3A8866F547627,$4B83CF4090C71503,$A9F1C1C2794CC542,$FD9B811BB61083D6
   Data.q $634F4077542B1CD5,$429A7A7A6044A5A1,$A8566465A564D1A3,$91C91EEBA339B16D,$648B40124A625853
   Data.q $7ADE841BDB687B57,$C0C25591C637938B,$2F1CC4B6E808D318,$44824B7A3856021D,$8831EE228553F7E3
   Data.q $F3F07F4236A319EE,$87F7B2FC64A814CF,$348E402020245892,$64ADADADAD58467E,$ECD719EBA4AC6C6C
   Data.q $E7787EA2CF003C55,$12F6CC11FE57403F,$2349920181CC7AAB,$E80425B11668C029,$B16D578A97A881B5
   Data.q $CBB38DF1AA6D7CBF,$098989BE4E0FA97E,$BBBBBA6413495671,$AB2BCBE7A3A3A2A5,$B502D8E2FCAE2AD9
   Data.q $8E6889D5AC57C70D,$9AAF0DDF7B7E1832,$6FA66F86197B0A76,$E1815E0760344259,$7607D9D99362C1BB
   Data.q $76A1D81E1774CE78,$BB07E4F940DD96BA,$816CDCC2DA40A0A0,$15150B3162E999B9,$AEFA657817D4F454
   Data.q $59BB6855A0ED3F6F,$A9F7B78969846125,$2559BA9DA2F9F0C8,$7AA5A8E3A7447191,$46A6A6BB450CBC9E
   Data.q $666641FC19FD2FE6,$884932A2A2A2B4A6,$7C8CF325D50D04B5,$CC32564D7DB2D58C,$FB49356B10FB2836
   Data.q $5CF9D353533EE2E7,$428508096FEA572E,$2E2D93ABABACC6C9,$EFC29168B859962E,$2AEAEAE45846A66B
   Data.q $C97CF9F0C823EE27,$3A956ECA2C02FF98,$49000000000DC40F,$826042AE444E45

New_8:
   Data.q $0A1A0A0D474E5089,$524448490D000000,$1800000018000000,$3D77E00000000608,$414449AD020000F8
   Data.q $D34FDBD5B5C74854,$FE0D1202F1C61C60,$08506F79DE314419,$5185E8778CAF44C6,$26D844A2A0898D2F
   Data.q $E4C90544C0120688,$04090974501E28A0,$18D8D958ECE31B1C,$8DB8381D921B029B,$0BDB7C7B025BC877
   Data.q $EBBE4D8074BACD12,$5CBE9B6FA4FBAFCD,$A8E67C238CE01020,$C375DBE9C876783B,$EDCB2BBC033381D3
   Data.q $83B9F74E38007376,$11D3A6BAA2EA7A3B,$AF3B7D8D62B8366B,$D25F8F37BBD5A589,$5640DB7D9A35AAB4
   Data.q $0423811BC5A57E6E,$04141DC5E6000B7C,$B57390C68BECEC2C,$87036C6756A55FAC,$9CE8C2E7C72BF273
   Data.q $43EB6E32EF4140D9,$147C0D0567A37749,$646652BC9C2D910B,$EE8C278B00BFC1C0,$484D8A095F050159
   Data.q $5BE04F2D0A3EC2BA,$13D2DC047AF4004D,$C68A4645749087A8,$EF4033C01CBF0209,$1E0318A820645015
   Data.q $3451362F9C4F2A8C,$29F86001240208DB,$695038D5413F6EE0,$9968A41AAF389E56,$4169912C13460824
   Data.q $C35004ED41133DC0,$8AF14C3FBF9C4F2B,$BC0EF711380C8B01,$CEA08074A0320C61,$7F9B19EF2AB53C06
   Data.q $26B4B04EDAF14A38,$334027C460304C03,$A795D83401C2F044,$5820E6D1454B8875,$17E6301958032DF9
   Data.q $393405D2F04C3E50,$DE285B540D32D795,$600CB2E04484114E,$A00FDB4108C54066,$3CC781DF37BCADD5
   Data.q $7CDB00E584067BC5,$ED04634780A09618,$65987DE519BBC073,$5D5824EED146C2CF,$50145D601CB642DF
   Data.q $CA3C9F03CDD02665,$4E3E29DB9E05E2FB,$BEC0324C032A1013,$783ECBD042C6A024,$276681F8F5E53E5D
   Data.q $F2C70089A2030745,$54127AD85718EE06,$4306ABCD96AF2B8F,$43807109AC1170E8,$5B062374421A6BD2
   Data.q $500F9A4893594A90,$07C66FAC889BA3F8,$65DB11D80CDB0F78,$35E905EE564078E1,$5BF175911E202DDD
   Data.q $7A5F3EC833CFFE54,$B8577D66E87749ED,$FF77D7D749E76EB0,$A3BDBD56BAEE763A,$A5C99A971C6974E9
   Data.q $83DE9FF752E3C81D,$49494948ED2E38F2,$E969853FDDB004BA,$67FF62CF632A956A,$9FF9FC4024521830
   Data.q $7BAFE1A3B29A01FD,$454900000000A1D8,$826042AE444E

Load_8:
   Data.q $0A1A0A0D474E5089,$524448490D000000,$1800000018000000,$3D77E00000000608,$414449B1040000F8
   Data.q $1C4C5B94ADC74854,$6FA9354B57C71855,$44C1F56A307DA2FA,$A1F18A543E8D2C5F,$9E45869A36A26989
   Data.q $8D1A5B45B553589A,$5EB1A5A5B4294D06,$02814A948B84B728,$B9605DDA16058A85,$05DD2CBBB0B2CA95
   Data.q $C59D976767765976,$2066FBF7F32E5B65,$7397E49C17D3196D,$6739CCFFBF7CCCE6,$CB5E923B2BE4F746
   Data.q $229DE2F51726F0EB,$1720E286370B9233,$BEE272F4DBADD93B,$2917BAF87C8B6AD4,$76086F715EA42E75
   Data.q $2DB63DD6EC9D8BB0,$76A8FE546EBFBF51,$B6851BC3185FAF12,$3ADD93B1760EC10D,$B9364DE9F5DB4BDD
   Data.q $A63900632C8C2878,$3ADD93B1760EC18D,$F21DDA27F5DB0BDD,$1FB9B4AA4FB400B0,$D9EAD7C6D63AEB4D
   Data.q $727459012B764EC5,$80474A046F7C06C9,$DA82CC001BD03F3E,$39DACA820307FFF6,$3EB595D83B2D70D7
   Data.q $07A3019B6409DEA0,$A2E2CE4FE46516A8,$CAF19C59A9C282CB,$A701F0D6F205EB38,$B34FC39EEB9104EE
   Data.q $D96B5459700CEE40,$BA701755C04D2EC1,$4C31439B9BA2E81F,$FC7787EEB6434E39,$88A89214317D8A34
   Data.q $E644E5CDFEA7A128,$8B5C8A55DD90CFB5,$D6AC39A1CE4F3F19,$77346B809A5D83B2,$48F5D3D0B4D16EE7
   Data.q $C474FE02DFFCC451,$D84F42B8A3146DA9,$FAF1C0E535519218,$EF37643EC7FE3843,$C0CF19E40ED94647
   Data.q $4D2EC1D96A55DD24,$2E756197E069F5C0,$C881B9FEB825B12D,$304B4A35A8A60142,$DC6EC8F3220A6945
   Data.q $ABC968E22F05238B,$1DFED738BBD2E6F8,$65A94166A857ECEA,$177AF4ED0134BB07,$C045DE60B470B4AC
   Data.q $0BBCE138C41C071E,$4EB28482FEA3DC4C,$9BDD7CE18F7BAA3D,$6E10F1A5464FCFC8,$60ECB5AB2FF02389
   Data.q $5698B7E693A02697,$42558B45FC08287F,$C5401DCA7DFB32FD,$30B6A5078B228CB8,$BCA0A66654068DF2
   Data.q $D47AB451EC4A06F3,$D7A260134BB0765A,$F4DF5CD36E071B2B,$A1DBB346E130D046,$1A8FC27EA276E4D0
   Data.q $D04E2E43B4550C67,$EFC6EC64DBD3B456,$AD36DA8B4151574D,$4A1E809A5D83B2D6,$1621BB4FF343BCAF
   Data.q $A9FC204BF052C52A,$41132058883A1C82,$D339C12F7A4C79DF,$89D8BE4A07771182,$0570EC1118339A96
   Data.q $E809A5D83B2D4A5D,$0046B7D5A65ED10F,$B2301EF8E7D18EB8,$1EE2E9F7890F9577,$8A9AC5601FADC682
   Data.q $CAC63F9888DD9699,$765A9427DC561A68,$8F34B5E9401B4BB0,$D0A4F82544F74A46,$C2C7F08A8BE11023
   Data.q $4A226A8173E79D98,$DDA19809A5D83B2D,$4AB1F74A8CAA8B62,$5C3DC0FAC7AF9F0F,$979F10134BB0463B
   Data.q $FAD47C0421F80C10,$28310082883E0820,$2A03660084044420,$2FDD10957131E7DC,$809A5C8162CC21AE
   Data.q $34C0E50CF439F985,$087B539F035D1070,$798C11438476898E,$E127DD9115EDC802,$3CD8617DB384AF44
   Data.q $FE6276B610470F24,$21D222BEAB4451F2,$62C04D2E4E21E4B5,$4D1EDC1ED366843C,$C7A834C35F63DFC7
   Data.q $343056F7CB08A3B0,$5FA65C51CD1F873D,$8CCB06306A713572,$98D5DDE232E2F884,$D50849CD40823D2B
   Data.q $F75F1C80C8AF98D9,$61831082FA063906,$DC342A7637750D30,$48CC7C1EAFA4C64C,$95460FC21DD9388B
   Data.q $06B951746E2D335C,$1D1720475D7D375B,$8347386818785C86,$BE3C06AE31D390F7,$E83A2B0681CA476D
   Data.q $1CDAAE34F8E7FBD7,$04EF5A27764D1D84,$A3439AE6D0477060,$3CFB815131DA843D,$29D60C22130CD7C6
   Data.q $3F194FBB156E2C18,$3D36EAA7720A30D0,$375F94AECB7135BD,$37CB529213CBE927,$DBC27949F2ADA527
   Data.q $5987A489E15E84A9,$6D76107BAD584F1B,$5BEB6678482FA5D9,$FF9E259E229E3A3A,$67AA02FFDD8E799F
   Data.q $00002F98D6D1D083,$42AE444E45490000,$8260

palette_8:
   Data.q $0A1A0A0D474E5089,$524448490D000000,$1800000018000000,$3D77E00000000608,$4144499E060000F8
   Data.q $54547996B5C74854,$1A2C8A30DFC71DD7,$563DB588090622B5,$832D912ADAA14171,$505044119076122C
   Data.q $363039006A2A9823,$680CB0E312945448,$B0CCC330A3B09144,$818658D45944828E,$56A4D04DF6166181
   Data.q $7B1E9EDABDBE64CA,$C7F3E3FD23F9348E,$BCB7F7B9F7DEE77D,$3E7793FFD40028FB,$D48CF5D40FFDF17C
   Data.q $3B0112B5EC794F39,$495C14EF8EC053A4,$1209C640DE70D690,$6614634822423B3E,$609E7E7BBB481B27
   Data.q $42E675F5BA9C6262,$B7137C3B20778C4E,$F83EBF5B5FDBBCF6,$473F2BBA1C76E483,$8F115A4165C08F37
   Data.q $F605A6DF3351F9A7,$16EB11B86CB11F65,$63E367B2E4E12E73,$2448816EFD5A8CD4,$6D3B2BB2B0F61DA2
   Data.q $7554DFC0E72DF35B,$A39DD9017CD550C9,$3A377733A2841690,$C6C18A3829437A6F,$833AAAA1A32A2838
   Data.q $974E46E71E0A517E,$64646EFB4535D9C5,$BFF1FC7FAB69A665,$4DB730B4F5F5F505,$89F97B3A5D67F8BB
   Data.q $CA07BF9A43C75550,$7E7E803BDE8C40F2,$416569184E39DA08,$4B2530926804BEA3,$A1BC379D19CB3881
   Data.q $52F71936A2829FE0,$E6C88AAEBA9F957D,$4AD2DCD047FCE864,$E3027963F8B173ED,$20C2CAC805FD5F49
   Data.q $3BA81F42EE89DECE,$D002BA685B6203F7,$7EA010550BC10DC7,$217DDFF50F9E981F,$1C1D030E6218F9C9
   Data.q $849B57D1830AC807,$05579C47A3FECBC6,$534D5EAF69327365,$75D0D4BD79F635D4,$0834A7A6BC65596C
   Data.q $BC86775FB4471CE2,$23644406316809C4,$F6F18F678462160F,$CBC0893193DD92DF,$91474170DC9025E1
   Data.q $A1F8947460DC241F,$9EE0F3A2031028A7,$AAB6B46CDA763C61,$89B6F54C2CA28EA6,$E79091B97A7B7D52
   Data.q $3D5E0C21DAE863F8,$002DD55E0B9E6504,$DC2AA07488CC281A,$18F596D182E54E46,$629206DCA287336D
   Data.q $41ED8EE091E41A26,$1790C1858861C0FD,$D79C7568EDD743EF,$36A3CF05848E926F,$56A41ABD6BF3D0AF
   Data.q $DCBC50A4F3C7EC56,$12BF185DF0CBC0C7,$A281B12AA033264E,$796F480F3CD201D8,$D17C733A0F86EBA1
   Data.q $AAAB8DE794FF624D,$82615B05CC9148F5,$F213D37BD18FA6C6,$6B5B6B739D5428CA,$19CD99F40881BDA4
   Data.q $3770BC1ED9651AEE,$87BE5B9E1EA594C7,$746F1BFBA2B60767,$0DE053D07C11F817,$24087D8B7A379159
   Data.q $2F81877C78BE85B1,$84B2428BA2F83AC5,$4A91E4502DEABA8E,$D934C86AF5A186E3,$39B33E6CD9B517BC
   Data.q $FF318013BCA355CD,$FACDA98BA16E7895,$7FBF6DD904DA8C18,$5CD49252F207D0BF,$AE57437A74CE3C77
   Data.q $A8D6049A0F93C907,$52720B1AC68D5C68,$D17B1052774A1257,$1608930110D5F1CA,$4C78FA6862BF9B30
   Data.q $B1508E57DF44F762,$BC811390BEC59277,$CD7A78FE3BCA0FCC,$C320F8A3723D7355,$947E5A59B3A8F524
   Data.q $EA583353D72BBCA5,$23D6EE722C6E368F,$C03192AB6A1EF1AB,$9F30445DF49683DB,$DD8B2877D631AD49
   Data.q $10613E8DE853DBD2,$D27C090950BD9E69,$A2FB15906F011507,$3F7D633AE75594F0,$D02AB514E94CA28A
   Data.q $28E5FED529AA28DA,$37DDF8F96B1707D7,$9FAA8704F9BB301D,$04419B2B450FC640,$E38196B6AE94980B
   Data.q $8F64ACA7F9112586,$ED85A239A6B53348,$61FA95904E594788,$50D4A2121E881040,$59FC6C5F2F5F82F3
   Data.q $A7AE76D6D6DD0C74,$3F9F9D2FFDF38195,$BFA80966FDC1F813,$1AB32B17729507DC,$26A0E2B83923CED0
   Data.q $BA39C352E96A0082,$9878E78B2686BABA,$C779FDE6B639D72F,$1208A696ADDCC709,$D8AF200371521C3F
   Data.q $D30B5B3CD693BC8B,$69D659D4FDC3E315,$8517159C1FCEE3DD,$620B970BCABC63FD,$38B5CBC30F857261
   Data.q $1744264AC18A9B9E,$46A577CE9A37866C,$7B2D74F4F4A84646,$DA161DECECF48F87,$458EF5BB68B47FD9
   Data.q $BB33709D98EBE9EF,$BE18EF7A39124BD5,$D996A7EE74D3FFCB,$25B62779C1363125,$C0CB6F1C9C0CCFDF
   Data.q $852838C2C31E2090,$183AA46307E4A107,$CD6364F9C1BBE5FD,$BEC4FCEFB59D030A,$6ADFF740625E2E96
   Data.q $21EEEC743A4E4978,$321521AA825DB44C,$3DB2622F77941261,$9A008A68A5D7DD1D,$FAD182505940CC4F
   Data.q $63D723A085D48C00,$9A7439A4F2C77826,$85D4D3D3D3053BDE,$E176587FDDA8978B,$0A2231428A8EF975
   Data.q $C69CB44C68C3C4C7,$D504775C30CF96B3,$0F5D281CC4A3DF6E,$3F47ECE645D83FDC,$D37AF14B28BC9429
   Data.q $ACFA44F3F9FE1F05,$1B5A6286AAB08517,$FE18D63103F00F25,$0510BFC87D48F166,$517A5CAA00F6A863
   Data.q $108C3C035E281AB4,$8C76E775002EA861,$45B6A928F0DEFE7B,$5F2541566D255E3C,$771C962CBAD9F348
   Data.q $36F07C9827E1F27A,$44B2FE8E12D93187,$F8B99383C0AE8A3C,$C8C95B4F8A2F732E,$9DAD899A74B9B89A
   Data.q $040AB352952A5D1D,$8916E9F4AFD6A142,$CAA7AC67B8ABAB01,$B582DE13CAA7DB59,$95396085B89B8A6D
   Data.q $6338C5D223AEB317,$6C8CA28D27B681A5,$EFD98A142AE66C6C,$4C4CD1B5B5B4D7E4,$347986D45169E857
   Data.q $D469B43673B091CA,$EA98981F95921276,$FFAA54A96B79797B,$2C58B28D7DBFE97D,$21D027EF4B1604ED
   Data.q $F8ABFBCFFE64E8F3,$187C92B44D27F925,$49000000000EA879,$826042AE444E45

Review_8:
   Data.q $0A1A0A0D474E5089,$524448490D000000,$1800000018000000,$3D77E00000000608,$414449F2040000F8
   Data.q $D34C6B95EDC74854,$29B9422D0F871857,$413A21CD956270E2,$4EA73A088A280699,$E73A9C4A638AE027
   Data.q $14A505A0C460DDAD,$45A052971C5CA211,$1172205546C089C4,$3AB958AA44E0B698,$CA2B82A8DB941686
   Data.q $88B0FB3FB7E058AC,$C3F07D92C96D92DB,$9EFBCFBC93927393,$425FF20008739EF3,$4193F1E095FE095E
   Data.q $70B2F7766F1E9592,$3932BDBBBC964AA5,$6A20E4F21C7C228C,$E77AD56319973EF4,$3EFEFE823BFD192E
   Data.q $46D476627D3A7B92,$A8B84EAC9D9E5CFF,$C2C93F6DA8EC45A3,$3637B8A768CE93BD,$A14688EE954164CF
   Data.q $E8FF22B6607A5A83,$FA8F56C123B888FA,$7205CFF86E9D101E,$7CBFB275F7F12579,$B6F683A266FF29D4
   Data.q $AC5544CDC6D46DE8,$52E84646750EBE1D,$102E8389C12FE49C,$24D5C2C43F4858F1,$5B3F1751EC883417
   Data.q $A2D9F51B5F9A8F27,$4647868C53884F0F,$61BDD93932640BC6,$C6D795E622EFDCE1,$0E912514DF3901BE
   Data.q $58094481C3C990B8,$C8BAC39C132C5221,$0B7A5F012D4CEC6C,$4D445ECF084AB921,$C63AA277B2D71885
   Data.q $B3F30C3D6FD13506,$305DFC362E9197D9,$FDA789A1F8F89256,$C65A31611F7CE7A7,$1697CE0FBC7E4433
   Data.q $602FC3DC26F0BE21,$758FD80A3E26447D,$4B7EB879A572366C,$423515C42ACDAB89,$C54A06B52A1BA37A
   Data.q $94F8554772495C79,$7F449401D6BE83FE,$F30FD38C4E49362C,$91767D350B27DEB3,$74BDBE2E54BC8467
   Data.q $C0DDE4101DCD951D,$1E1C342DB1A783B2,$A1648AEAE658EE1E,$3865150518891210,$D1E3D7155F1C8DFC
   Data.q $5AD2D0E8D7DC61D3,$DB8CF1941F0CEA8F,$08E2130956ADBD02,$6D4D8796391AD961,$8500249E4337C4BA
   Data.q $9FDDC23DB754168A,$2542AB0EA0A47087,$70CECEC5841213D8,$8F3045CB87037373,$41C84CEC09D64907
   Data.q $4183C02343129142,$17BABB451C1A7E1D,$70AE621250DB338A,$0F8B7B5713D861B4,$42F59FB4D4AD4E9A
   Data.q $D9419EBAD70CAD75,$D0BB1C5AFD3B8833,$E08410BE097C3580,$A960B96170EE15DD,$3A2422D73CBC1BAB
   Data.q $A01ACAD211029E14,$51DA078AAC747AA3,$6A26654E827E3EF4,$9CB49DCF38EF8B84,$C7669B03B4C8D3E8
   Data.q $8E7C54F6D6F79D76,$968679EDA835DBFA,$9519E13B2BE45A87,$06EDE00831D13D83,$2046AF7B787DE7DB
   Data.q $EC7BE12263FC076F,$734EA3A1AAB5AE0C,$7BD06B3AFA39E860,$8772C52CD1651029,$F3F3F10588426CC9
   Data.q $D8E2276FAE669833,$C928BAEAD74A74E6,$3F14FBD4D197CD0F,$1E7826C5E2473DF6,$23A2E1162E3700CE
   Data.q $360C78E0238627E0,$D4740B4AFB23A646,$A06437F42A3568F6,$AEEBDCFE228D9F2B,$D8A993E0A8BD0C73
   Data.q $646190C46545AA74,$B6C82735DF52CB34,$16F14F48C78CEDAA,$ED1CAB5EE2C75474,$495D8F595591F7DD
   Data.q $69514D86991C7C52,$5F8D555850F28AE0,$7CBA864FA818147A,$B7EE951E2D4EDA17,$68D3A06C65B12C56
   Data.q $10D1A34D0E1C3893,$F553535244343432,$B06EBCD89A26CCCC,$FCD2634155877122,$A17919539673F7E7
   Data.q $77453FCAFA3378B7,$EE8DFD6F157476E9,$7CEE82DD2BE8ED92,$76C12EA1B967B46F,$8C19BB52CB13F638
   Data.q $69A5CB97382A3495,$4525253937F1DAB5,$C0C53994C4C4D8CF,$B330714279BBAB69,$A1E6931A2D9C66EB
   Data.q $A38CEF255A017525,$1A513798DA876859,$6E6C42DAB387BD3C,$BDDED98B6D445F42,$8A9F1FE0E0E0DA1C
   Data.q $D7BD22448B7AEA11,$58E7331654192D2C,$C9931C9F716EF819,$EE161F310414D665,$EDE64BF7245E6A67
   Data.q $9B1931E6D3539E7D,$A30787BB96647AE9,$AFE060606F42A2A2,$8126AD5A8931BB1F,$A84D0B0E05F48181
   Data.q $813464E27486988C,$861179AC813C67BC,$D3319ACFAD4A593E,$E8E8EFD1F6CD94DA,$0222A54A81FF67F8
   Data.q $6144614861468081,$BC9358FA0A0C12FC,$E5015F82DFFF32FA,$00181E54774AD32E,$AE444E4549000000
   Data.q $826042

Save_8:
   Data.q $0A1A0A0D474E5089,$524448490D000000,$1800000018000000,$3D77E00000000608,$4144491A050000F8
   Data.q $54500B949DC74854,$8E91F34B37C71855,$32B351A6C6CA63E5,$C50115126875830D,$D4CCB7454CC54CC6
   Data.q $53347334B4266AD1,$7714141141142501,$C590160C54976117,$2C28BD8F2C0B2EE7,$21F65DE06E7902FB
   Data.q $B2EE77FD9643CB2E,$CE6FCCEE3E2B8E59,$5E77EEFCEE77DFB9,$5DC537B3D993B1AC,$316A77609411EFD7
   Data.q $611EEDF2139E0B76,$BC5C2F954B7E8229,$EB1600160E1C346C,$0E3437F82B5E89B5,$F9E5AD019B500DBD
   Data.q $5890813A5B6F9150,$103F6F414582EB51,$C6BAF67C19E09C8C,$4A105997EC00D371,$D08D9977E2B32BD8
   Data.q $CBEC7F58CE6D624E,$80DBEA1EF8AA20B7,$49A0A2E06322B12D,$661BF6C08D2A088F,$A8670EAA71C05284
   Data.q $21B0A110CAA69C02,$287BBB0A838BD15C,$A3311F93EF4B423B,$4876026D408FDAC9,$006D4D01A5B948AD
   Data.q $9E5E43F943D18FA8,$2DC054C46E8AE884,$5038ED37C3812B47,$8C7B1C113B734168,$0A075917F0E64740
   Data.q $8FDC8019A28013CB,$32A89C40F2ED1B30,$3881C4E7101578E3,$424677AEBDB495A5,$F218EB2680B2292A
   Data.q $1D051DA8590D4138,$E9013C37024EA628,$4879FCB61332401C,$7A694E06A8909952,$91AFD5E4E3E54891
   Data.q $35A71D8D44819250,$A18152088ED2BC40,$8226482255E08DC3,$A910AC0BBB40B25A,$A3A6F205AFE630D4
   Data.q $AB8026966E0F8AE7,$109C36841AAF02EB,$99CF8887C67C472F,$B110D7E04D55338F,$7ECEA605483F8EDA
   Data.q $A41605BD80F70D04,$3295887ADA1901D4,$D9C4E9A82029525C,$1765D385DB50405A,$53DB397826CE9310
   Data.q $438EDC8CB5842E72,$04EE8FC05D2C0B72,$A4113F603B3114CC,$39C5D080F5690037,$C88844A9204685C2
   Data.q $22F4FF2207824F34,$420D2CB73BE774ED,$63F76EE0898753F2,$F325080ECC04602A,$D4461F1A0A93D228
   Data.q $3C772F610F4A240C,$110D3B9222A793C2,$C2DC1E3F8C201F29,$85DE97440DFE6428,$0E48CB3629F807AD
   Data.q $F0A059340447C4DA,$0FCDB900EEF21B62,$C9884DDB8CB12623,$E6DB089E93888CD9,$045829D81ED12D83
   Data.q $9B0E46D6AE0B4A9E,$D32478D89DCDB701,$30D6579BD834BFEC,$222EDF607EB2B2EA,$A5480E3EF3B18557
   Data.q $23D97D56452C69C8,$71C124D4B8503764,$524163A784F879D9,$895842B08B928221,$1AC0AB3B2C29532F
   Data.q $0967EF795CA58521,$1D8A3554AC77A312,$4CBADA3AD025CB30,$E20069788DE73B08,$3F32891F30DCF324
   Data.q $88F5994D8B5C5C84,$A352866D1D476B2E,$0AA3B19D685CE825,$5AF04D60B5B2422B,$34FEC26DDED040F9
   Data.q $E5BA0423CEE5441F,$8D857C17BE1F9E58,$6B4A337A6962D57F,$E85DAA11D4A2505A,$41DAA643F726319C
   Data.q $76236EB6040FC104,$DFAE41E04BB03DF2,$9ED62A6D2FB2DC8F,$688B041AF9CE0C5A,$EB904B4B104DD5C8
   Data.q $5D3EB7263133E982,$7DC13FFB226178E5,$A2A62163CAF2077B,$23F295CB718F2E21,$AC6A042F8F139838
   Data.q $46EDC68AA571A2C9,$21C6267D305DAA23,$02BFC063A539CE39,$84CEB11F29E1A0E6,$E2B1A6C9C02B93CF
   Data.q $D44EB1E966DF1EA2,$AB1A1C9C6267D307,$5A9F68954827FED2,$585BFCA7C69AB970,$59F8CDD937C06B9F
   Data.q $B5AF5B19A936C262,$06C41B6247580C12,$FD182224C112172C,$990F617E4EE57B0E,$E632149FEF5F2426
   Data.q $72102BF2040AF3D7,$D5D48BB25AA288D5,$8306D8C5A1912AB8,$496E6756EA828AC5,$D060304645E3A54A
   Data.q $E879B29F8C46F790,$DEC302790EB7F7B8,$C2E2497BDC32129C,$6A6F41B415762514,$A144458435EE5647
   Data.q $16BA82DA468ADF46,$104FAAB524B7338B,$70EE6FDFC83FE010,$2327E66B3127C8C2,$E056E5F6AF664F06
   Data.q $5DC44675B234CBBB,$9AAB320178F6C22A,$CCE3BAA191A1A391,$AB19E4E0616F71F9,$6169DF42D3C5F79C
   Data.q $06F8AFE9B4EEF1BD,$CE797BCD5DF50EC7,$5CF06F0E5F60DE6A,$17DD9A0DE1AFE90E,$8D469798C9C37263
   Data.q $C76359A6809B3F63,$BC275EB162CA198C,$6501FEC3319804F5,$00EFCD2354E3452C,$AE444E4549000000
   Data.q $826042
EndDataSection

Egypt my love
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5494
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: Mastring PNG format with PureBasic [Windows]

Post by Kwai chang caine »

Thanks a lot RASHAD !!! 8)

But like usually...i'm the "better" client for found bugs :oops:


Image


If you load two time the same picture, i have a nice red line :oops:
ImageThe happiness is a road...
Not a destination
User avatar
electrochrisso
Addict
Addict
Posts: 989
Joined: Mon May 14, 2007 2:13 am
Location: Darling River

Re: Mastring PNG format with PureBasic [Windows]

Post by electrochrisso »

Not sure what how to use this one RASHAD, but it sure looks interesting. :)

Hey Kcc you look very muscular today. :lol:
PureBasic! Purely the best 8)
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4946
Joined: Sun Apr 12, 2009 6:27 am

Re: Mastring PNG format with PureBasic [Windows]

Post by RASHAD »

Hi electrochrisso
- Try to load an image with solid colors (default output image will be 8 bit in depth)
- Go to palette and check the color which you want to change its opaque
(0 is the default and it is full transparent)
- Preview your work before saving to be satisfied
- After saving the image the result will be a transparent image with 1 or 4 or 8 bit depth

In short :
It is a tool to create an 1,4 or 8 bit PNG image with different transparent colors or even different Opaque levels (Size is matter beside style too :mrgreen: )
Egypt my love
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4946
Joined: Sun Apr 12, 2009 6:27 am

Re: Mastring PNG format with PureBasic [Windows]

Post by RASHAD »

Code: Select all

CreateImage(0,400,300,24)
StartDrawing(ImageOutput(0))
Box(0,0,400,100,#Red)
Box(0,100,400,100,#Green)
Box(0,200,400,100,#Blue)
StopDrawing()
SaveImage(0,"e:\Test.bmp",#PB_ImagePlugin_BMP)
- Pick 4 bit depth (for easiness)
- Loadimage "e:\test.bmp" using the tool
- Play with the Green color for example in the palette (Use different values) same value for the color
- Save the the image then open it with any image viewer
- Check later with different bit depth different opaque values :P
Have fun
Egypt my love
sphinx
Enthusiast
Enthusiast
Posts: 120
Joined: Thu Oct 26, 2006 6:34 pm
Contact:

Re: Mastring PNG format with PureBasic [Windows]

Post by sphinx »

Keep up the good work Rashad :)
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5494
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: Mastring PNG format with PureBasic [Windows]

Post by Kwai chang caine »

electrochrisso wrote:Hey Kcc you look very muscular today.
:lol: Yes it's thank to all the pages of the documentation of PB, that i turn, all the day for learning it :lol:

@Rashad
Just for your info, i have always the same bug line 114 if i load two time the same PNG :wink:
ImageThe happiness is a road...
Not a destination
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4946
Joined: Sun Apr 12, 2009 6:27 am

Re: Mastring PNG format with PureBasic [Windows]

Post by RASHAD »

Hi sphinx :P
Keep in touch

Sorry KCC
I could not reproduce the bug you mentioned
I tried all the possible formats with different depths
Everything are OK
Egypt my love
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5494
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: Mastring PNG format with PureBasic [Windows]

Post by Kwai chang caine »

Sorry KCC
I could not reproduce the bug you mentioned
I tried all the possible formats with different depths
Everything are OK
No problem.. :wink:
It's just for help you...and apparently...that's not works too :lol:
ImageThe happiness is a road...
Not a destination
User avatar
electrochrisso
Addict
Addict
Posts: 989
Joined: Mon May 14, 2007 2:13 am
Location: Darling River

Re: Mastring PNG format with PureBasic [Windows]

Post by electrochrisso »

RASHAD wrote:

Code: Select all

CreateImage(0,400,300,24)
StartDrawing(ImageOutput(0))
Box(0,0,400,100,#Red)
Box(0,100,400,100,#Green)
Box(0,200,400,100,#Blue)
StopDrawing()
SaveImage(0,"e:\Test.bmp",#PB_ImagePlugin_BMP)
- Pick 4 bit depth (for easiness)
- Loadimage "e:\test.bmp" using the tool
- Play with the Green color for example in the palette (Use different values) same value for the color
- Save the the image then open it with any image viewer
- Check later with different bit depth different opaque values :P
Have fun
Thanks RASHAD I was using complicated images thinking if I choose a color in the pallete it changes all the same colors in the image.
PureBasic! Purely the best 8)
Post Reply