Re: What way ?

Share your advanced PureBasic knowledge/code with the community.
User avatar
Danilo
Addict
Addict
Posts: 3036
Joined: Sat Apr 26, 2003 8:26 am
Location: Planet Earth

Re: What way ?

Post 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.
Last edited by Danilo on Mon Dec 15, 2003 6:44 pm, edited 1 time in total.
cya,
...Danilo
...:-=< http://codedan.net/work >=-:...
-= FaceBook.com/DaniloKrahn =-
User avatar
Andre
PureBasic Team
PureBasic Team
Posts: 2137
Joined: Fri Apr 25, 2003 6:14 pm
Location: Germany (Saxony, Deutscheinsiedel)
Contact:

Post 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... :)
Bye,
...André
(PureBasicTeam::Docs & Support - PureArea.net | Order:: PureBasic | PureVisionXP)
User avatar
Danilo
Addict
Addict
Posts: 3036
Joined: Sat Apr 26, 2003 8:26 am
Location: Planet Earth

Post by Danilo »

Small mistake, Andre - fixed in the above code. Thx.
cya,
...Danilo
...:-=< http://codedan.net/work >=-:...
-= FaceBook.com/DaniloKrahn =-
User avatar
eddy
Addict
Addict
Posts: 1479
Joined: Mon May 26, 2003 3:07 pm
Location: Nantes

my little contribution

Post 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
Imagewin10 x64 5.72 | IDE | PB plugin | Tools | Sprite | JSON | visual tool
Post Reply