Page 1 of 1

Re: What way ?

Posted: Sun Dec 14, 2003 10:15 pm
by Danilo
Code updated For 5.20+
neotoma wrote:And how can i copy the images to a temporary buufer ?
With GetDIBits_() / SetDIBits_() for example (WinAPI).

I think PB uses StretchBlt_() for the resize internally.


Here some examples for GetDIBits_() / SetDIBits_():

CatchTransparentImage()

Code: Select all

;
; by Danilo, 14.12.2003 - german forum
;
Procedure CatchTransparentImage(Number,ImageLabel,TransColor,NewColor)
  ;>
  ;> Number     = ImageNumber
  ;> ImageLabel = Label of the included Image
  ;> TransColor = RGB: Transparent Color,        -1 = First Color in Picture
  ;> NewColor   = RGB: New Color for TransColor, -1 = System Window Background
  ;>
  Structure _CTI_BITMAPINFO
    bmiHeader.BITMAPINFOHEADER
    bmiColors.RGBQUAD[1]
  EndStructure
  
  Structure _CTI_LONG
    l.l
  EndStructure
  
  Structure _CTI_WORD
    w.w
  EndStructure
  
  hBmp = CatchImage(Number,ImageLabel)
  If hBmp
    hDC  = StartDrawing(ImageOutput(Number))
    If hDC
      ImageWidth  = ImageWidth(Number) : ImageHeight = ImageHeight(Number) : ImageDepth = ImageDepth(Number)
      mem = GlobalAlloc_(#GMEM_FIXED|#GMEM_ZEROINIT,ImageWidth*ImageHeight*4)
      If mem
        bmi._CTI_BITMAPINFO
        bmi\bmiHeader\biSize   = SizeOf(BITMAPINFOHEADER)
        bmi\bmiheader\biWidth  = ImageWidth
        bmi\bmiheader\biHeight = ImageHeight
        bmi\bmiheader\biPlanes = 1
        bmi\bmiheader\biBitCount = ImageDepth
        bmi\bmiheader\biCompression = #BI_RGB
        If GetDIBits_(hDC,hBmp,0,ImageHeight(Number),mem,bmi,#DIB_RGB_COLORS) <> 0
          If TransColor = -1
            If ImageDepth=32
              *pixels._CTI_LONG = mem+((ImageHeight-1)*ImageWidth*4)
              TransColor = *pixels\l
              Debug Hex(TransColor)
            ElseIf ImageDepth=16
              *pixelsW._CTI_WORD = mem+((ImageHeight-1)*ImageWidth*2)
              TransColor2 = *pixelsW\w&$FFFF
              Debug Hex(TransColor2)
            EndIf
          Else
            If ImageDepth=32
              TransColor = RGB(Blue(TransColor),Green(TransColor),Red(TransColor))
            ElseIf ImageDepth=16
              r.l = ((TransColor>>3)&%11111)
              g.l = ((TransColor>>6)&%11111100000)
              b.l = ((TransColor>>9)&%1111100000000000)
              TransColor2 = (r|g|b)&$FFFF
              Debug Hex(TransColor2)
            EndIf
          EndIf
          
          If NewColor = -1
            NewColor = GetSysColor_(#COLOR_BTNFACE) ; #COLOR_WINDOW
          EndIf
          NewColor = RGB(Blue(NewColor),Green(NewColor),Red(NewColor))
          
          If ImageDepth=32
            *pixels._CTI_LONG = mem
            For a = 1 To ImageWidth*ImageHeight
              If *pixels\l = TransColor
                *pixels\l = NewColor
              EndIf
              *pixels + 4
            Next a
          ElseIf ImageDepth=16
            r = ((NewColor>>3)&%11111)
            g = ((NewColor>>6)&%11111100000)
            b = ((NewColor>>9)&%1111100000000000)
            NewColor2.w   = (b|g|r)&$FFFF
            *pixelsW._CTI_WORD = mem
            For a = 1 To ImageWidth*ImageHeight
              If *pixelsW\w&$FFFF = TransColor2
                *pixelsW\w  = NewColor2
              EndIf
              *pixelsW + 2
            Next a
          EndIf
          
          If SetDIBits_(hDC,hBmp,0,ImageHeight(Number),mem,bmi,#DIB_RGB_COLORS) <> 0
            Result = hBmp
          EndIf
        EndIf
        GlobalFree_(mem)
      EndIf
    EndIf
    StopDrawing()
  EndIf
  ProcedureReturn Result
EndProcedure

image1 = CatchTransparentImage(1,?Image_01,-1,-1)
If image1
  OpenWindow(0,0,0,ImageWidth(image1),ImageHeight(image1),"Image",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  CreateGadgetList(WindowID(0))
  ImageGadget(0,0,0,ImageWidth(image1),ImageHeight(image1),image1)
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Else
  MessageRequester("ERROR","Cant load image!",#MB_ICONERROR)
EndIf


DataSection
  Image_01:
  IncludeBinary "c:\test.bmp"
EndDataSection



LoadTransparentImage()

Code: Select all

;
;
; by Danilo, 22.04.2003 - german forum
;
Procedure LoadTransparentImage(Number,FileName$,TransColor,NewColor)
  ;>
  ;> Number     = ImageNumber
  ;> FileName$  = File Name
  ;> TransColor = RGB: Transparent Color,        -1 = First Color in Picture
  ;> NewColor   = RGB: New Color for TransColor, -1 = System Window Background
  ;>
  Structure _LTI_BITMAPINFO
    bmiHeader.BITMAPINFOHEADER
    bmiColors.RGBQUAD[1]
  EndStructure
  
  Structure _LTI_LONG
    l.l
  EndStructure
  
  hBmp = LoadImage(Number,FileName$)
  If hBmp
    hDC  = StartDrawing(ImageOutput(Number))
    If hDC
      ImageWidth  = ImageWidth(Number) : ImageHeight = ImageHeight(Number)
      mem = GlobalAlloc_(#GMEM_FIXED|#GMEM_ZEROINIT,ImageWidth*ImageHeight*4)
      If mem
        bmi._LTI_BITMAPINFO
        bmi\bmiHeader\biSize   = SizeOf(BITMAPINFOHEADER)
        bmi\bmiheader\biWidth  = ImageWidth
        bmi\bmiheader\biHeight = ImageHeight
        bmi\bmiheader\biPlanes = 1
        bmi\bmiheader\biBitCount = 32
        bmi\bmiheader\biCompression = #BI_RGB
        If GetDIBits_(hDC,hBmp,0,ImageHeight(Number),mem,bmi,#DIB_RGB_COLORS) <> 0
          If TransColor = -1
            *pixels._LTI_LONG = mem+((ImageHeight-1)*ImageWidth*4)
            TransColor = *pixels\l
          Else
            TransColor = RGB(Blue(TransColor),Green(TransColor),Red(TransColor))
          EndIf
          
          If NewColor = -1
            NewColor = GetSysColor_(#COLOR_BTNFACE) ; #COLOR_WINDOW
          EndIf
          NewColor = RGB(Blue(NewColor),Green(NewColor),Red(NewColor))
          
          *pixels._LTI_LONG = mem
          For a = 1 To ImageWidth*ImageHeight
            If *pixels\l = TransColor
              *pixels\l = NewColor
            EndIf
            *pixels + 4
          Next a
          
          If SetDIBits_(hDC,hBmp,0,ImageHeight(Number),mem,bmi,#DIB_RGB_COLORS) <> 0
            Result = hBmp
          EndIf
        EndIf
        GlobalFree_(mem)
      EndIf
    EndIf
    StopDrawing()
  EndIf
  ProcedureReturn Result
EndProcedure

image1 = LoadTransparentImage(1,"Test.bmp",-1,-1)
If image1
  OpenWindow(0,0,0,ImageWidth(image1),ImageHeight(image1),"Image",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  CreateGadgetList(WindowID(0))
  ImageGadget(0,0,0,ImageWidth(image1),ImageHeight(image1),image1)
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Else
  MessageRequester("ERROR","Cant load image!",#MB_ICONERROR)
EndIf


ChangeImageColorChannel()

Code: Select all

;
; by Danilo, 22.04.2003 - german forum
;
;
Procedure ChangeImageColorChannel(SourceImage,DestImage,Red,Green,Blue)
  ;>
  ;> OriginalImage  = number of Source Image
  ;> DestImage      = number of New Image that gets changed (must be same size!)
  ;>
  ;> Red,Green,Blue = How much change this color channel ?
  ;>                  -255 -> Reduce color completely (fade out color)
  ;>                     0 -> dont touch, change nothing
  ;>                   255 -> add color to color channel (fade in)
  ;>
  Structure _CIC_BITMAPINFO
    bmiHeader.BITMAPINFOHEADER
    bmiColors.RGBQUAD[1]
  EndStructure
  
  Structure _CIC_LONG
    l.l
  EndStructure
  
  If IsImage(SourceImage)=0 Or IsImage(DestImage)=0
    ProcedureReturn 0
  EndIf
  
  hBmp = ImageID(SourceImage)
  hDC  = StartDrawing(ImageOutput(hBmp))
  If hDC
    ImageWidth1  = ImageWidth(hBmp) : ImageHeight1 = ImageHeight(hBmp)
    mem = GlobalAlloc_(#GMEM_FIXED|#GMEM_ZEROINIT,ImageWidth1*ImageHeight1*4)
    If mem
      bmi._CIC_BITMAPINFO
      bmi\bmiHeader\biSize   = SizeOf(BITMAPINFOHEADER)
      bmi\bmiheader\biWidth  = ImageWidth1
      bmi\bmiheader\biHeight = ImageHeight1
      bmi\bmiheader\biPlanes = 1
      bmi\bmiheader\biBitCount = 32
      bmi\bmiheader\biCompression = #BI_RGB
      If GetDIBits_(hDC,hBmp,0,ImageHeight1,mem,bmi,#DIB_RGB_COLORS) <> 0
        StopDrawing()
        hBmp = ImageID(DestImage)
        hDC = StartDrawing(ImageOutput(hBmp))
        If hDC
          
          *pixels._CIC_LONG = mem
          For a = 1 To ImageWidth1*ImageHeight1
            
            RED2  = (*pixels\l >>16) & $FF
            GREEN2= (*pixels\l >> 8) & $FF
            BLUE2 = (*Pixels\l     ) & $FF
            
            If RED2 < RED And RED>0
              RED2 = RED
            ElseIf RED<0
              RED2 = RED2+RED
              If RED2<0:RED2=0:EndIf
            EndIf
            
            If GREEN2 < GREEN And GREEN>0
              GREEN2 = GREEN
            ElseIf GREEN<0
              GREEN2 = GREEN2+GREEN
              If GREEN2<0:GREEN2=0:EndIf
            EndIf
            
            If BLUE2 < BLUE And BLUE>0
              BLUE2 = BLUE
            ElseIf BLUE<0
              BLUE2 = BLUE2+BLUE
              If BLUE2<0:BLUE2=0:EndIf
            EndIf
            
            *pixels\l = (RED2<<16)|(GREEN2<<8)|(BLUE2)
            *pixels + 4
          Next a
          
          If SetDIBits_(hDC,hBmp,0,ImageHeight1,mem,bmi,#DIB_RGB_COLORS) <> 0
            Result = 1
          EndIf
        EndIf
        StopDrawing()
      EndIf
      GlobalFree_(mem)
    Else
      StopDrawing()
    EndIf
  Else
    StopDrawing()
  EndIf
  ProcedureReturn Result
EndProcedure


;- PROGRAM START

UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTIFFImageDecoder()
UseTGAImageDecoder()

;FileName$ = OpenFileRequester("SELECT IMAGE","","BMP|*.bmp",0)
FileName$ = OpenFileRequester("SELECT IMAGE","","Image Files|*.bmp;*.jpg;*.jpeg;*.png;*.tiff;*.tga|All Files|*.*",0)
;Filename$ = "Test.bmp"
If FileName$
  If LoadImage(1,FileName$)
    ImageWidth  = ImageWidth(1)
    ImageHeight = ImageHeight(1)
    If ImageWidth >800:ImageWidth =800:Resize=1:EndIf
    If ImageHeight>600:ImageHeight=600:Resize=1:EndIf
    If Resize
      ResizeImage(1,ImageWidth,ImageHeight)
    EndIf
    
    If CreateImage(2,ImageWidth,ImageHeight)
      WinWidth  = ImageWidth+140
      WinHeight = ImageHeight : If WinHeight < 300:WinHeight=300:EndIf
      OpenWindow(0,0,0,WinWidth,WinHeight,"Image",#PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_Invisible)
      TrackBarGadget(1,ImageWidth+10,18,40,250,0,255*2,#PB_TrackBar_Vertical):SetGadgetState(1,255)
      TrackBarGadget(2,ImageWidth+50,18,40,250,0,255*2,#PB_TrackBar_Vertical):SetGadgetState(2,255)
      TrackBarGadget(3,ImageWidth+90,18,40,250,0,255*2,#PB_TrackBar_Vertical):SetGadgetState(3,255)
      TextGadget(8,ImageWidth+10,270,40,20,"R:  000")
      TextGadget(9,ImageWidth+50,270,40,20,"G:  000")
      TextGadget(0,ImageWidth+90,270,40,20,"B:  000")
      ImageGadget(7,0,0,WinWidth-140,ImageHeight,ImageID(2))
      HideWindow(0,0):SetForegroundWindow_(WindowID(0))
      ;- PROGRAM EVENT LOOP
      Repeat
        Select WaitWindowEvent()
          Case #PB_Event_CloseWindow:End
          Case #PB_Event_Gadget
            Gadget = EventGadget()
            Select Gadget
              Case 1:RED   = GetGadgetState(1)-255:SetGadgetText(8,"R: "+RSet(Str(RED  ),4," ")):ChangeImageColorChannel(1,2,RED,GREEN,BLUE):SetGadgetState(7,ImageID(2))
              Case 2:GREEN = GetGadgetState(2)-255:SetGadgetText(9,"G: "+RSet(Str(GREEN),4," ")):ChangeImageColorChannel(1,2,RED,GREEN,BLUE):SetGadgetState(7,ImageID(2))
              Case 3:BLUE  = GetGadgetState(3)-255:SetGadgetText(0,"B: "+RSet(Str(BLUE ),4," ")):ChangeImageColorChannel(1,2,RED,GREEN,BLUE):SetGadgetState(7,ImageID(2))
            EndSelect
        EndSelect
      ForEver
    Else
      MessageRequester("ERROR","Cant create image!",#MB_ICONERROR)
    EndIf
  Else
    MessageRequester("ERROR","Cant load image!",#MB_ICONERROR)
  EndIf
EndIf
;-PROGRAM END


GrayImage()

Code: Select all

;
; by Danilo, 22.04.2003 - german forum
;
Procedure GrayImage(Number)
  ;>
  ;> Number     = ImageNumber
  ;>
  Structure _GI_BITMAPINFO
    bmiHeader.BITMAPINFOHEADER
    bmiColors.RGBQUAD[1]
  EndStructure
  
  Structure _GI_LONG
    l.l
  EndStructure
  
  Structure _GI_BGR
    R.b
    G.b
    B.b
    A.b
  EndStructure
  
  hBmp = ImageID(Number)
  If hBmp
    hDC  = StartDrawing(ImageOutput(Number))
    If hDC
      ImageWidth  = ImageWidth(Number) : ImageHeight = ImageHeight(Number)
      mem = GlobalAlloc_(#GMEM_FIXED|#GMEM_ZEROINIT,ImageWidth*ImageHeight*4)
      If mem
        bmi._GI_BITMAPINFO
        bmi\bmiHeader\biSize   = SizeOf(BITMAPINFOHEADER)
        bmi\bmiheader\biWidth  = ImageWidth
        bmi\bmiheader\biHeight = ImageHeight
        bmi\bmiheader\biPlanes = 1
        bmi\bmiheader\biBitCount = 32
        bmi\bmiheader\biCompression = #BI_RGB
        If GetDIBits_(hDC,hBmp,0,ImageHeight(Number),mem,bmi,#DIB_RGB_COLORS) <> 0
          *pixels._GI_LONG = mem
          *COLORS._GI_BGR   = mem
          For a = 1 To ImageWidth*ImageHeight
            color.b = Int((0.299* *COLORS\R) + (0.587* *COLORS\G) + (0.114* *COLORS\B))
            *pixels\l = RGB(color,color,color)
            *pixels + 4
            *COLORS + 4
          Next a
          
          If SetDIBits_(hDC,hBmp,0,ImageHeight(Number),mem,bmi,#DIB_RGB_COLORS) <> 0
            Result = hBmp
          EndIf
        EndIf
        GlobalFree_(mem)
      EndIf
    EndIf
    StopDrawing()
  EndIf
  ProcedureReturn Result
EndProcedure

UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTIFFImageDecoder()
UseTGAImageDecoder()

;FileName$ = OpenFileRequester("SELECT IMAGE","","BMP|*.bmp",0)
FileName$ = OpenFileRequester("SELECT IMAGE","","Image Files|*.bmp;*.jpg;*.jpeg;*.png;*.tiff;*.tga|All Files|*.*",0)
;Filename$ = "Test.bmp"

If FileName$
  If LoadImage(1,FileName$)
    GrayImage(1)
    OpenWindow(0,0,0,ImageWidth(1),ImageHeight(1),"Image",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
    CreateGadgetList(WindowID(0))
    ImageGadget(0,0,0,ImageWidth(1),ImageHeight(1),ImageID(0))
    HideWindow(0,0):SetForegroundWindow_(WindowID(0))
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  Else
    MessageRequester("ERROR","Cant load image!",#MB_ICONERROR)
  EndIf
EndIf


Small Test to fill the image buffer

Code: Select all

;
; by Danilo, 22.04.2003 - german forum
;
Procedure GrayImage(Number)
  ;>
  ;> Number     = ImageNumber
  ;>
  Structure _GI_BITMAPINFO
    bmiHeader.BITMAPINFOHEADER
    bmiColors.RGBQUAD[1]
  EndStructure
  
  Structure _GI_LONG
    l.l
  EndStructure
  
  Structure _GI_BGR
    R.b
    G.b
    B.b
    A.b
  EndStructure
  
  hBmp = ImageID(Number)
  If hBmp
    hDC  = StartDrawing(ImageOutput(Number))
    If hDC
      ImageWidth  = ImageWidth(Number) : ImageHeight = ImageHeight(Number)
      mem = GlobalAlloc_(#GMEM_FIXED|#GMEM_ZEROINIT,ImageWidth*ImageHeight*4)
      If mem
        bmi._GI_BITMAPINFO
        bmi\bmiHeader\biSize   = SizeOf(BITMAPINFOHEADER)
        bmi\bmiheader\biWidth  = ImageWidth
        bmi\bmiheader\biHeight = ImageHeight
        bmi\bmiheader\biPlanes = 1
        bmi\bmiheader\biBitCount = 32
        bmi\bmiheader\biCompression = #BI_RGB
        If GetDIBits_(hDC,hBmp,0,ImageHeight(Number),mem,bmi,#DIB_RGB_COLORS) <> 0
          *pixels._GI_LONG = mem
          *COLORS._GI_BGR   = mem
          For a = 1 To ImageWidth*ImageHeight
            color.b = Int((0.299* *COLORS\R) + (0.587* *COLORS\G) + (0.114* *COLORS\B))
            *pixels\l = RGB(color,color,color)
            *pixels + 4
            *COLORS + 4
          Next a
          
          If SetDIBits_(hDC,hBmp,0,ImageHeight(Number),mem,bmi,#DIB_RGB_COLORS) <> 0
            Result = hBmp
          EndIf
        EndIf
        GlobalFree_(mem)
      EndIf
    EndIf
    StopDrawing()
  EndIf
  ProcedureReturn Result
EndProcedure

UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTIFFImageDecoder()
UseTGAImageDecoder()

;FileName$ = OpenFileRequester("SELECT IMAGE","","BMP|*.bmp",0)
FileName$ = OpenFileRequester("SELECT IMAGE","","Image Files|*.bmp;*.jpg;*.jpeg;*.png;*.tiff;*.tga|All Files|*.*",0)
;Filename$ = "Test.bmp"

If FileName$
  If LoadImage(1,FileName$)
    GrayImage(1)
    OpenWindow(0,0,0,ImageWidth(1),ImageHeight(1),"Image",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
    CreateGadgetList(WindowID(0))
    ImageGadget(0,0,0,ImageWidth(1),ImageHeight(1),ImageID(0))
    HideWindow(0,0):SetForegroundWindow_(WindowID(0))
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  Else
    MessageRequester("ERROR","Cant load image!",#MB_ICONERROR)
  EndIf
EndIf

Only example 1 should work with 16bit screenmode, others are
all for 32bit desktops only.

It shows you how it works and whats possible... maybe it helps.

Posted: Mon Dec 15, 2003 5:12 pm
by Andre
@Danilo: Great examples, as always... :D

Any idea why the ChangeImageColorChannel() code gives an error "StopDrawing() must be called before calling StartDrawing() again." at line 29, with enabled debugger? Without all is fine... :)

Posted: Mon Dec 15, 2003 6:50 pm
by Danilo
Small mistake, Andre - fixed in the above code. Thx.

my little contribution

Posted: Wed Dec 24, 2003 11:39 pm
by eddy
Thanks Danilo for your image processing template. :P
It does not work with 16bytes colored images.

Code: Select all

Procedure ColorFilterImage(Number,ColorFilter.l) 
  ;> 
  ;> Number     = ImageNumber 
  ;> 
  Structure _GI_BITMAPINFO 
    bmiHeader.BITMAPINFOHEADER 
    bmiColors.RGBQUAD[1] 
  EndStructure 

  Structure _GI_LONG 
   l.l 
  EndStructure 

  hBmp = UseImage(Number) 
  If hBmp 
    hDC  = StartDrawing(ImageOutput()) 
    If hDC 
      ImageWidth  = ImageWidth() : ImageHeight = ImageHeight() 
      mem = GlobalAlloc_(#GMEM_FIXED|#GMEM_ZEROINIT,ImageWidth*ImageHeight*4) 
      If mem 
        bmi._GI_BITMAPINFO 
        bmi\bmiHeader\biSize   = SizeOf(BITMAPINFOHEADER) 
        bmi\bmiheader\biWidth  = ImageWidth 
        bmi\bmiheader\biHeight = ImageHeight 
        bmi\bmiheader\biPlanes = 1 
        bmi\bmiheader\biBitCount = 32 
        bmi\bmiheader\biCompression = #BI_RGB 
        If GetDIBits_(hDC,hBmp,0,ImageHeight(),mem,bmi,#DIB_RGB_COLORS) <> 0 
          *pixels._GI_LONG = mem 
          
          For a = 1 To ImageWidth*ImageHeight 
            
            ;initial color
            ri = (*pixels\l >>16) & $FF 
            gi = (*pixels\l >> 8) & $FF 
            bi = (*Pixels\l     ) & $FF             
            
            r=(ri/255.0)*Red(ColorFilter)
            g=(gi/255.0)*Green(ColorFilter)
            b=(bi/255.0)*Blue(ColorFilter)

            *pixels\l = RGB(b,g,r)
            *pixels + 4 
          Next a 

          If SetDIBits_(hDC,hBmp,0,ImageHeight(),mem,bmi,#DIB_RGB_COLORS) <> 0 
            Result = hBmp 
          EndIf 
        EndIf 
        GlobalFree_(mem) 
      EndIf 
    EndIf 
    StopDrawing() 
  EndIf 
  ProcedureReturn Result 
EndProcedure 

UseJPEGImageDecoder() 
UsePNGImageDecoder() 
UseTIFFImageDecoder() 
UseTGAImageDecoder() 

;----- TEST ----

FileName$ = OpenFileRequester("SELECT IMAGE","","Image Files|*.bmp;*.jpg;*.jpeg;*.png;*.tiff;*.tga|All Files|*.*",0) 
If FileName$ 
  If LoadImage(1,FileName$)         
    ColorFilterImage(1,ColorRequester()) 
    OpenWindow(0,0,0,ImageWidth(),ImageHeight(),#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"Image") 
      CreateGadgetList(WindowID()) 
      ImageGadget(0,0,0,ImageWidth(),ImageHeight(),ImageID()) 
    HideWindow(0,0):SetForegroundWindow_(WindowID()) 
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow 
  Else 
    MessageRequester("ERROR","Cant load image!",#MB_ICONERROR) 
  EndIf 
EndIf