Load and Save Many Image Format [Windows]

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

Load and Save Many Image Format [Windows]

Post by RASHAD »

Hi guys
- Next is one of my projects did not finish it, now it is yours
- Supported formats :
"bmp","tif","tiff","png","jpg","jpeg","jp2","ico","rle","emf","wmf","tga","ppm" And "pgm"
- Many tips are included like Recycle pick what you like
- You are free to add ,delete,modify
Have fun

Part #1:

Code: Select all

UseTGAImageDecoder()
UsePNGImageDecoder()
UseJPEG2000ImageDecoder()
UseJPEG2000ImageEncoder()
UseGIFImageDecoder()

#SmoothingModeInvalid     = -1
#SmoothingModeDefault     = 0
#SmoothingModeHighSpeed   = 1
#SmoothingModeHighQuality = 2
#SmoothingModeNone        = 3
#SmoothingModeAntiAlias   = 4

; CodecInfo\MimeType
#Jpeg_Encoder = "image/jpeg"
#Gif_Encoder = "image/gif"
#Bmp_Encoder = "image/bmp"
#Png_Encoder = "image/png"
#Tif_Encoder = "image/tiff"

#EncoderParameterValueTypeLong = 4

#TBS_TOOLTIPS         = $0100
#FOF_NORECURSION      = $1000
#BFFM_SETSELECTIONA = #WM_USER + 102;
#BFFM_SETSELECTIONW = #WM_USER + 103;

Global *token, *Image,*Localgfx, *dimensionID.GUID, dimensionsCount = 0,encoderCLSID.GUID
Global  Num,Quit,Count,Result,Width.i,Height.i,FileName$,sFile$,nFileName$,load,NEW_Image,tgaflag, mWheel.f,imgh,Folder.S
Global NewList img$()

;m = AllocateMemory(#MAX_PATH)

NEW_Image = 1
mWheel.f = 1

Structure PPMColor
  r.a
  g.a
  b.a
EndStructure

Structure PGMColor
  c.a
EndStructure

Structure RectF
  x.f
  y.f
  width.f
  height.f
EndStructure

Structure GdiplusStartupInput
  GdiPlusVersion.i
  *DebugEventCallback.DebugEventProc
  SuppressBackgroundThread.i
  SuppressExternalCodecs.i
EndStructure

Structure ImageCodecInfo
  clsid.CLSID
  formatID.GUID
  *codecName
  *dllName
  *formatDescription
  *filenameExtension
  *mimeType
  flags.l
  version.l
  sigCount.l
  sigSize.l
  *sigPattern.byte
  *sigMask.byte
EndStructure

Structure EncoderParameter
  Guid.GUID
  NumberOfValues.l
  Type.l
  Value.l
EndStructure

Structure EncoderParameters
  Count.l
  Parameter.EncoderParameter[1]
EndStructure

Global STYLE

CompilerIf #PB_Compiler_Unicode
  STYLE = #BFFM_SETSELECTIONW
CompilerElse
  STYLE = #BFFM_SETSELECTIONA
CompilerEndIf

Procedure PathCB(hWnd, uMsg, lParam, lData)
  Select uMsg
    Case #BFFM_INITIALIZED
      ;SetWindowLongPtr_(hWnd,#GWL_STYLE,GetWindowLongPtr_(hWnd,#GWL_STYLE) &~ #WS_CAPTION)
      SetWindowPos_(hWnd, #HWND_TOPMOST   , WindowX(0),WindowY(0)+65,-1,-1 ,#SWP_NOSIZE )
      If lData
        SendMessage_ (hwnd, STYLE, 1, lData)
        Delay(100)
        PostMessage_ (hwnd, STYLE, 1, lData)
      EndIf
      
      ;Case #BFFM_SELCHANGED
      ;SendMessage_(hwnd, #BFFM_SETSTATUSTEXT, 0,PeekS(lparam))
  EndSelect
EndProcedure

Procedure.S PathRequesterAPI( StatusText.S, Path.S)
  Folder.S = Space(#MAX_PATH)
  bi.BROWSEINFO
  bi\ulFlags =  #BIF_NONEWFOLDERBUTTON|#BIF_NEWDIALOGSTYLE |#BIF_RETURNONLYFSDIRS
  bi\lpfn = @PathCB()
  bi\lParam = @Path
  bi\lpszTitle = @StatusText
  Result = SHBrowseForFolder_(@bi)
  SHGetPathFromIDList_(Result, @Folder)
  CoTaskMemFree_(Result)
  ProcedureReturn Folder
EndProcedure

Procedure.f Max(n.f,m.f)
  If n >= m
    Max.f = n
  Else
    Max.f = m
  EndIf
  ProcedureReturn Max
EndProcedure

; Procedure.l Max(n1.l,n2.l)
;   !MOV Eax,dword[p.v_n1]
;   !MOV Ecx,dword[p.v_n2]
;   !CMP Ecx,Eax
;   !cmovg Eax,Ecx
;   ProcedureReturn
; EndProcedure

Procedure.l ARGB(rgb.l, a.b = 255)
  !MOV eax, [p.v_rgb]
  !BSWAP eax
  !SHR eax, 8
  !MOV [p.v_rgb], eax
  !MOV eax, [p.v_a]
  !MOV dword [p.v_rgb+3], eax
  ProcedureReturn rgb
EndProcedure

Procedure StringToBStr (string$) ; By Zapman Inspired by Fr34k
  Protected Unicode$ = Space(Len(String$)* 2 + 2)
  Protected bstr_string.l
  PokeS(@Unicode$, String$, -1, #PB_Unicode)
  bstr_string = SysAllocString_(@Unicode$)
  ProcedureReturn bstr_string
EndProcedure

Procedure.i Gdiplus_New(version = 1, *hEventCB = #Null, Codecs = #False, bgThread = #False)
  OpenLibrary(0, "gdiplus.dll")
  Protected *token, input.GdiplusStartupInput
  With input
    \GdiPlusVersion = version
    \DebugEventCallback = *hEventCB
    \SuppressExternalCodecs = Codecs
    \SuppressBackgroundThread = bgThread
  EndWith
  CallFunction(0, "GdiplusStartup", @*token, @input, #Null)
  ProcedureReturn *token
EndProcedure

Procedure Draw_Image()
  CallFunction(0,"GdipImageSelectActiveFrame",*image, ?FrameDimensionPage, Num)
  CallFunction(0,"GdipGetImageWidth",*image, @Width.i)
  CallFunction(0,"GdipGetImageHeight",*image, @Height.i)
  If IsImage(0)
    FreeImage(0)
  EndIf
  CreateImage(0,Width,Height)
  dc = StartDrawing(ImageOutput(0)) ; Your line 
  If CallFunction(0,"GdipCreateFromHDC",dc, @*Localgfx) = 0
    CallFunction(0,"GdipGraphicsClear",*Localgfx,$FFFFFFFF)                         
    CallFunction(0,"GdipDrawImageRectI",*Localgfx, *image, 0,0, width, height)
  EndIf
  StopDrawing()
  
  StatusBarText(0, 1, "Width = " + Str(ImageWidth(0)),#PB_StatusBar_Center)
  StatusBarText(0, 2, "Height = " + Str(ImageHeight(0)),#PB_StatusBar_Center)
  StartDrawing(CanvasOutput(0))
  Box(0,0,GadgetWidth(0),GadgetHeight(0),$FFFFFF)
  DrawAlphaImage(ImageID(0),GadgetWidth(0)/2-width/2,GadgetHeight(0)/2-height/2)
  StopDrawing()
EndProcedure

Procedure GetEncoderClsid(format$, *Clsid.CLSID)
  Protected number
  Protected Size
  Protected *pImageCodecInfo.ImageCodecInfo
  Protected i, *memory
  
  CallFunction(0,"GdipGetImageEncodersSize",@number, @Size)
  If Size = 0
    ProcedureReturn -1
  EndIf
  
  *memory = AllocateMemory(Size)
  If *memory = #Null
    ProcedureReturn -1
  EndIf
  
  *pImageCodecInfo = *memory
  CallFunction(0,"GdipGetImageEncoders",number, Size, *pImageCodecInfo)
  
  For i = 1 To number
    If format$ = PeekS(*pImageCodecInfo\MimeType, -1, #PB_Unicode)
      CopyMemory(*pImageCodecInfo\clsid, *Clsid, SizeOf(CLSID))
      FreeMemory(*memory)
      ProcedureReturn i
    EndIf
    *pImageCodecInfo + SizeOf(ImageCodecInfo)
  Next
  FreeMemory(*memory)
  ProcedureReturn -1
EndProcedure

Procedure sTGAformat()
  If tgaflag = 0
    img = 0
  Else
    img = 2
  EndIf
  StartDrawing(ImageOutput(img))
  If CreateFile(0,sFile$)
    Restore Header
    For tmp=1 To 12
      Read Header
      WriteByte(0,Header)
    Next   
    WriteWord(0,ImageWidth(img))
    WriteWord(0,ImageHeight(img))   
    WriteByte(0,24)
    WriteByte(0,32)
    For y=0 To ImageHeight(img)-1
      For x=0 To ImageWidth(img)-1
        color=Point(x,y)       
        WriteByte(0,Blue(color))
        WriteByte(0,Green(color))
        WriteByte(0,Red(color))
      Next
    Next
    CloseFile(0)
  EndIf
  StopDrawing()
EndProcedure

Procedure sEMFformat()
  emf_hDC = CreateEnhMetaFile_(0, @sFile$, 0, 0)
  If emf_hDC
    img_hDC = CreateCompatibleDC_(emf_hDC)
    oldImage = SelectObject_(img_hDC, ImageID(0))
    BitBlt_(emf_hDC, 0, 0, Width,Height, img_hDC, 0, 0, #SRCCOPY)
    SelectObject_(img_hDC, oldImage)
    DeleteDC_(img_hDC)
    hEMF = CloseEnhMetaFile_(emf_hDC)
    DeleteEnhMetaFile_(hEMF)
  EndIf
EndProcedure

Procedure sWMFformat()
  tmpEMF$ =  GetHomeDirectory()+"tmp_EMF.emf"
  emf_hDC = CreateEnhMetaFile_(0, @tmpEMF$, 0, 0)
  If emf_hDC
    img_hDC = CreateCompatibleDC_(emf_hDC)
    oldImage = SelectObject_(img_hDC, ImageID(0))
    BitBlt_(emf_hDC, 0, 0, Width,Height, img_hDC, 0, 0, #SRCCOPY)
    SelectObject_(img_hDC, oldImage)
    DeleteDC_(img_hDC)
    hEMF = CloseEnhMetaFile_(emf_hDC)
    DeleteEnhMetaFile_(hEMF)
    ;**********************
    hDc = GetDC_(GetDesktopWindow_());
    hDcComp = CreateCompatibleDC_(hDc);
    ReleaseDC_(GetDesktopWindow_(), hDc);
    SetMapMode_(hDcComp,#MM_ANISOTROPIC);
    hEmf = GetEnhMetaFile_(@tmpEMF$)
    uSize = GetWinMetaFileBits_(hEmf, 0, #Null, #MM_ANISOTROPIC, hDcComp);
    *pBuffer = GlobalAlloc_(#GPTR, uSize)                                ;
    GetWinMetaFileBits_(hEmf, uSize, *pBuffer, #MM_ANISOTROPIC, hDcComp) ;
    hWmf = SetMetaFileBitsEx_(uSize, *pBuffer)
    PlayMetaFile_(hDcComp, hWmf);
    hWmfNew = CopyMetaFile_(hWmf, sFile$)
    DeleteMetaFile_(hWmfNew);
    DeleteMetaFile_(hWmf)   ;
    DeleteEnhMetaFile_(hEmf);
    GlobalFree_(*pBuffer)   ;
    DeleteDC_(hDcComp)      ;
    DeleteFile(tmpEMF$)
  EndIf
EndProcedure

Procedure LoadImagePPM(Image,filename$)
  Result = ReadFile(#PB_Any, filename$,#PB_Ascii)
  If Result
    If CreateImage(Image, 1, 1)
      Format$ = ReadString(Result)
      Dimensions$ = ReadString(Result)
      If Val(StringField(Dimensions$, 1, " ")) = 0
        Dimensions$ = ReadString(Result)
      EndIf
      w  = Val(StringField(Dimensions$, 1, " "))
      h  = Val(StringField(Dimensions$, 2, " "))
      If w = 0 Or h = 0
        ProcedureReturn 1
      EndIf
      ResizeImage(Image, w, h)
      StartDrawing(ImageOutput(Image))
      max = Val(ReadString(Result))
      Select Format$
        Case "P2"
          Stringlen = Lof(Result) - Loc(Result)
          content$  = Space(Stringlen*SizeOf(Character)+1)
          Dim color.s(0)
          ReadData(Result, @content$, Stringlen)
          content$ = PeekS(@content$,-1,#PB_Ascii)
          CreateRegularExpression(1, "\d+")
          ExtractRegularExpression(1, content$, color())
          For y = 0 To h - 1
            For x = 0 To w - 1
              pos = (y*w + x)*1
              Plot(x, y,RGB(Val(color(pos)),Val(color(pos)),Val(color(pos))))
            Next
          Next
          
        Case "P3"
          Stringlen = Lof(Result) - Loc(Result)
          content$  = Space(Stringlen*SizeOf(Character)+1)
          Dim color.s(0)
          ReadData(Result, @content$, Stringlen)
          content$ = PeekS(@content$,-1,#PB_Ascii)
          CreateRegularExpression(1, "\d+")
          ExtractRegularExpression(1, content$, color())
          For y = 0 To h - 1
            For x = 0 To w - 1
              pos = (y*w + x)*3
              r=Val(color(pos))*255 / max
              g=Val(color(pos+1))*255 / max
              b=Val(color(pos+2))*255 / max
              Plot(x, y, RGB(r,g,b))
            Next
          Next
          
        Case "P5"
          Bufferlen = Lof(Result) - Loc(Result)
          *Buffer   = AllocateMemory(Bufferlen)
          ReadData(Result, *Buffer, Bufferlen)
          For y = 0 To h - 1
            For x = 0 To w - 1
              *gray.PGMColor = pos + *Buffer
              Plot(x, y,RGB(*gray\c,*gray\c,*gray\c))
              pos + 1
            Next
          Next
          
        Case "P6"
          Bufferlen = Lof(Result) - Loc(Result)
          *Buffer   = AllocateMemory(Bufferlen)
          ReadData(Result, *Buffer, Bufferlen)
          For y = 0 To h - 1
            For x = 0 To w - 1
              *color.PPMColor = pos + *Buffer
              Plot(x, y, RGB(*color\r*255 / max, *color\g*255 / max, *color\b*255 / max))
              pos + 3
            Next
          Next
      EndSelect
      StopDrawing()     
      CloseFile(Result)
      ProcedureReturn 1
    EndIf
  EndIf
EndProcedure

Procedure ImageGrayout(image)
  Protected w, h, x, y, r, g, b, gray, color
  
  w = ImageWidth(image)
  h = ImageHeight(image)
  StartDrawing(ImageOutput(image))
  For x = 0 To w - 1
    For y = 0 To h - 1
      color = Point(x, y)
      r    = Red(color)
      g    = Green(color)
      b    = Blue(color)
      gray = 0.2126*r + 0.7152*g + 0.0722*b
      Plot(x, y, RGB(gray, gray, gray))
    Next
  Next
  StopDrawing()
EndProcedure

Procedure ImageToColor(image)
  Protected w, h, x, y, v, gray
  
  w = ImageWidth(image)
  h = ImageHeight(image)
  StartDrawing(ImageOutput(image))
  For x = 0 To w - 1
    For y = 0 To h - 1
      gray = Point(x, y)
      v    = Red(gray) ;for gray, each of the color's components is the same
                       ;color = RGB(0.2126*v, 0.7152*v, 0.0722*v)
      Plot(x, y, RGB(v, v, v))
    Next
  Next
  StopDrawing()
EndProcedure

Procedure SaveImageAsPPM(Image, file$, Binary = 1)
  ; Author Roger Rösch (Nickname Macros)
  IDFiIe = CreateFile(#PB_Any, file$)
  If IDFiIe
    If StartDrawing(ImageOutput(Image))
      WriteStringN(IDFiIe, "P" + Str(3 + 3*Binary))
      WriteStringN(IDFiIe, "#Created with PureBasic using a Function created from Macros for Rosettacode.org ")
      width  = ImageWidth(Image)
      height = ImageHeight(Image)
      WriteStringN(IDFiIe, Str(width) + " " + Str(height))
      WriteStringN(IDFiIe, "255")
      If Binary = 0
        For y = 0 To height - 1
          For x = 0 To width - 1
            color = Point(x, y)
            WriteString(IDFiIe, Str(Red(color)) + " " + Str(Green(color)) + " " + Str(Blue(color)) + "  ")
          Next
          WriteStringN(IDFiIe, "")
        Next
      Else  ; Save in Binary Format
        For y = 0 To height - 1
          For x = 0 To width - 1
            color = Point(x, y)
            WriteByte(IDFiIe, Red(color))
            WriteByte(IDFiIe, Green(color))
            WriteByte(IDFiIe, Blue(color))
          Next
        Next
      EndIf
      StopDrawing()
    EndIf
    CloseFile(IDFiIe)
  EndIf
EndProcedure

Procedure _DrawImage(FileName$)
  If IsImage(NEW_Image)
    FreeImage(NEW_Image)
  EndIf
  StatusBarText(0, 0," "+GetFilePart(FileName$)) 
  SetCursor_(LoadCursor_(0,#IDC_WAIT))
  Select LCase(GetExtensionPart(FileName$))
    Case "tga"                   
      LoadImage(0,FileName$)
      If IsImage(0)
        CopyImage(0,NEW_Image)
        StatusBarText(0, 1, "Width = " + Str(ImageWidth(NEW_Image)),#PB_StatusBar_Center)
        StatusBarText(0, 2, "Height = " + Str(ImageHeight(NEW_Image)),#PB_StatusBar_Center)                       
        StartDrawing(CanvasOutput(0))
        Box(0,0,GadgetWidth(0),GadgetHeight(0),$FFFFFF)
        DrawAlphaImage(ImageID(NEW_Image),GadgetWidth(0)/2-ImageWidth(NEW_Image)/2,GadgetHeight(0)/2-ImageHeight(NEW_Image)/2)
        StopDrawing()
      Else
        MessageRequester("Error", "Format Not supported", #MB_OK |#MB_ICONERROR)
      EndIf
      
    Case "cur"
      hCursor = LoadCursorFromFile_(FileName$)
      If hCursor
        SetGadgetAttribute(1,#PB_Button_Image,hCursor)
      Else
        MessageRequester("Error", "Format Not supported", #MB_OK |#MB_ICONERROR)
      EndIf
      
    Case "ppm","pgm"
      LoadImagePPM(0, FileName$)
      If IsImage(0)
        CopyImage(0,NEW_Image)
        StatusBarText(0, 1, "Width = " + Str(ImageWidth(NEW_Image)),#PB_StatusBar_Center)
        StatusBarText(0, 2, "Height = " + Str(ImageHeight(NEW_Image)),#PB_StatusBar_Center)                                   
        StartDrawing(CanvasOutput(0))
        Box(0,0,GadgetWidth(0),GadgetHeight(0),$FFFFFF)
        DrawAlphaImage(ImageID(NEW_Image),GadgetWidth(0)/2-ImageWidth(NEW_Image)/2,GadgetHeight(0)/2-ImageHeight(NEW_Image)/2)
        StopDrawing()
      Else
        MessageRequester("Error", "Format Not supported", #MB_OK |#MB_ICONERROR)
      EndIf
      
    Case "jp2"
      LoadImage(0,FileName$)
      If IsImage(0)
        CopyImage(0,NEW_Image)
        StatusBarText(0, 1, "Width = " + Str(ImageWidth(NEW_Image)),#PB_StatusBar_Center)
        StatusBarText(0, 2, "Height = " + Str(ImageHeight(NEW_Image)),#PB_StatusBar_Center)                                   
        StartDrawing(CanvasOutput(0))
        Box(0,0,GadgetWidth(0),GadgetHeight(0),$FFFFFF)
        DrawAlphaImage(ImageID(NEW_Image),GadgetWidth(0)/2-ImageWidth(NEW_Image)/2,GadgetHeight(0)/2-ImageHeight(NEW_Image)/2)
        StopDrawing()
      Else
        MessageRequester("Error", "Format Not supported", #MB_OK |#MB_ICONERROR)
      EndIf
      
    Case "gif"
      LoadImage(0,FileName$)
      StatusBarText(0, 1, "Width = " + Str(ImageWidth(0)),#PB_StatusBar_Center)
      StatusBarText(0, 2, "Height = " + Str(ImageHeight(0)),#PB_StatusBar_Center)           
      If ImageFrameCount(0) > 1
        AddWindowTimer(0, 0, 1)
        Repeat       
          Select WaitWindowEvent()
            Case #PB_Event_CloseWindow
              Quit6 = 1 : Quit = 1
              
            Case #PB_Event_Timer
              SetImageFrame(0, Frame)
              ;
              RemoveWindowTimer(0, 0)
              If GetImageFrameDelay(0) > 0
                AddWindowTimer(0, 0, GetImageFrameDelay(0))
              Else
                RemoveWindowTimer(0, 0)
                Quit6 = 1
              EndIf                   
              CopyImage(0,NEW_Image)                       
              StartDrawing(CanvasOutput(0))
              Box(0,0,GadgetWidth(0),GadgetHeight(0),$FFFFFF)
              DrawAlphaImage(ImageID(NEW_Image),GadgetWidth(0)/2-ImageWidth(NEW_Image)/2,GadgetHeight(0)/2-ImageHeight(NEW_Image)/2)
              StopDrawing()
              
              ; Go to next frame
              Frame+1
              If Frame >= ImageFrameCount(0) ; Cycle back to first frame, to play in loop
                Frame = 0
              EndIf
              
            Case #PB_Event_Gadget
              Select EventGadget()
                Case 1
                  RemoveWindowTimer(0, 0)
                  Quit6 = 1
                  
                Case 3
                  RemoveWindowTimer(0, 0)
                  Quit6 = 1
                  Beep_(800,100)
                  mWheel = 1
                  If Num > 0
                    Num - 1
                    _DrawImage(img$())
                  Else
                    Num = Count - 1
                    PreviousElement(img$())
                    _DrawImage(img$())
                  EndIf
                  
                Case 5
                  RemoveWindowTimer(0, 0)
                  Quit6 = 1
                  Beep_(800,100)
                  mWheel = 1             
                  If Num < Count - 1
                    Num + 1
                    _DrawImage(img$())
                  Else
                    Num = 0
                    NextElement(img$())
                    _DrawImage(img$())
                  EndIf
              EndSelect
          EndSelect 
        Until Quit6 = 1
        SetActiveWindow(0)
      EndIf       
      
    Case "bmp","tif","tiff","png","jpg","jpeg","ico","rle"
      *token = Gdiplus_New()
      If *token
        If CallFunction(0,"GdipLoadImageFromFile",StringToBStr(FileName$), @*Image) = 0   ;"e:\MPage_4.tif"
          If CallFunction(0,"GdipImageGetFrameDimensionsCount",*image, @dimensionsCount) = 0
            If dimensionsCount
              *dimensionID = AllocateMemory(SizeOf(GUID)*dimensionsCount)
              If *dimensionID
                CallFunction(0,"GdipImageGetFrameCount",*image, ?FrameDimensionPage, @count)
                FreeMemory(*dimensionID)
              EndIf
            EndIf
          EndIf
          Draw_Image()               
        Else
          MessageRequester("Error", "Format Not supported", #MB_OK |#MB_ICONERROR)
        EndIf
      EndIf
  EndSelect
EndProcedure

Procedure Clean()
  nFileName$ = GetTemporaryDirectory()+"nSave.bmp"
  If FileSize(nFileName$) > 0
    CallFunction(0,"GdipDisposeImage",*image)    ;Very Important
    CallFunction(0,"GdipDeleteGraphics",*Localgfx) 
    CallFunction(0,"GdiplusShutdown",*token)
    SHFileOp.SHFILEOPSTRUCT
    m = AllocateMemory( ( Len(nFileName$)+2 ) * SizeOf(Character) )
    If m
      PokeS(m,nFileName$)
      SHFileOp\pFrom  = m
      SHFileOp\wFunc  = #FO_DELETE
      SHFileOp\fFlags = #FOF_SILENT|#FOF_NOERRORUI |#FOF_NOCONFIRMATION
      result = SHFileOperation_(SHFileOp)
      FreeMemory(m)
      nFileName$=""
    EndIf
  EndIf
EndProcedure

Procedure WindowProc(hWnd,uMsg,wParam,lParam)
  Result = #PB_ProcessPureBasicEvents
  Select uMsg
    Case #WM_NCPAINT
      SendMessage_(hWnd, #WM_NCACTIVATE, 1, 0)
      
    Case #WM_NCACTIVATE
      If wParam = 0
        ProcedureReturn 1
      EndIf
      
    Case #WM_SIZE
      ResizeGadget(0,1,30,WindowWidth(0)-2,WindowHeight(0)- 60)       
      StartDrawing(CanvasOutput(0))
      Box(0,0,GadgetWidth(0),GadgetHeight(0),$FFFFFF)
      If IsImage(NEW_Image)
        DrawAlphaImage(ImageID(NEW_Image),GadgetWidth(0)/2-ImageWidth(NEW_Image)/2,GadgetHeight(0)/2-ImageHeight(NEW_Image)/2)
      ElseIf IsImage(0)
        DrawAlphaImage(ImageID(0),GadgetWidth(0)/2-ImageWidth(0)/2,GadgetHeight(0)/2-ImageHeight(0)/2)
      EndIf
      StopDrawing()
  EndSelect
  ProcedureReturn Result
EndProcedure

Procedure aboutCB()
  ;SetWindowCallback(0)
  DisableWindow(0,1)
  about = OpenWindow(#PB_Any,0,0,400,200,"",#PB_Window_WindowCentered|#PB_Window_BorderLess|#WS_BORDER |#WS_VISIBLE,WindowID(0))
  UseGadgetList(WindowID(about))
  font1 = LoadFont(#PB_Any,"Tahoma",10)
  font2 = LoadFont(#PB_Any,"Georgia",24)
  aimg = ImageGadget(#PB_Any,0,0,400,200,0,#PB_Image_Border)
  iimg = CreateImage(#PB_Any,400,200,24)
  StartDrawing(ImageOutput(iimg))
  Box(0,0,400,300,$C8EFF3)
  DrawingMode(#PB_2DDrawing_Transparent)
  DrawingFont(FontID(font1))
  DrawText(20,37,"Main Coder :",0)
  DrawingFont(FontID(font2))
  DrawText(121,19,"M.M.RASHAD",$0)
  DrawText(120,20,"M.M.RASHAD",$0000FF)
  DrawingFont(FontID(font1))
  DrawText(120,80,"email : mmrashad2100@hotmail.com",$0)
  DrawText(120,100,"Mobile : 0505279242",$0)
  DrawText(120,120,"RASHAD Software "+Chr(169)+ " 2017" ,$0)
  StopDrawing()
  SetGadgetState(aimg,ImageID(iimg)) 
  AnimateWindow_(WindowID(about),5000,#AW_BLEND |#AW_ACTIVATE)
  While WindowEvent() : Wend
  Delay(3000)
  While WindowEvent() : Wend 
  AnimateWindow_(WindowID(about),5000,#AW_CENTER| #AW_HIDE)
  CloseWindow(about)
  DisableWindow(0,0)
  ;SetWindowCallback(@WindowProc())
EndProcedure

CatchImage(10, ?LoadImage)
ResizeImage(10,30,30)
CatchImage(11, ?arrow_left)
ResizeImage(11,24,24)
CatchImage(12, ?arrow_right)
ResizeImage(12,24,24)
CatchImage(13, ?Save)
ResizeImage(13,22,22)
CatchImage(14, ?help_4)
ResizeImage(14,28,28)
CatchImage(15, ?Copy)
ResizeImage(15,22,22)
CatchImage(16, ?Delete)
ResizeImage(16,22,22)
CatchImage(17, ?Find)
ResizeImage(17,24,24)
CatchImage(18, ?Print)
ResizeImage(18,32,32)
CatchImage(19, ?deletefile)
ResizeImage(19,24,24)
CatchImage(20, ?recycling2)
ResizeImage(20,24,24)
CatchImage(22, ?settings2)
;ResizeImage(20,24,24)

LoadFont(0,"Tahoma",14)
HandCur  = LoadCursor_(0, #IDC_HAND)

OpenWindow(0, 0, 0, 800, 600, "Image Manager",#PB_Window_MinimizeGadget| #PB_Window_MaximizeGadget| #PB_Window_SizeGadget| #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetWindowColor(0,$DEDEDE)
WindowBounds(0,600,450,#PB_Default,#PB_Default) 

CanvasGadget(0, 1, 30, 798,540,#PB_Canvas_Border)
Dim gtext$(16)

ImageGadget(1,5,-1,30,30,ImageID(10))
gtext$(1) = "Select Folder"
ImageGadget(3,45,2,30,30,ImageID(11))
gtext$(3) = "Previous Image"
ImageGadget(5,75,2,30,30,ImageID(12))
gtext$(5) = "Next Image"
ImageGadget(7,130,4,30,30,ImageID(15))
gtext$(7) = "Copy"
ImageGadget(8,160,4,30,30,ImageID(20))
gtext$(8) = "Recycle"
ImageGadget(9,190,4,30,30,ImageID(19))
gtext$(9) = "Delete"
ImageGadget(10,240,2,30,30,ImageID(17))
gtext$(10) = "Find" 
ImageGadget(12,270,4,30,30,ImageID(13))
gtext$(12) = "Save As.."
ImageGadget(13,295,0,30,30,ImageID(18))
gtext$(13) = "Print"
TrackBarGadget(14,340,4 ,150,22,1,100,#TBS_TOOLTIPS)
gtext$(14) = "JPG Compression Ratio"
SetGadgetState(14,70)
ImageGadget(15,510,3,30,30,ImageID(22)) 
gtext$(15) = "Settings & Tools"
ImageGadget(16,540,1,30,30,ImageID(14))
gtext$(16) = "Help"

ttip = CreateWindowEx_(0, "Tooltips_Class32", "", #TTS_ALWAYSTIP|#TTS_BALLOON, 0, 0, 0, 0, 0, 0, 0, 0)
SetWindowTheme_(ttip, @null.w, @null.w)
SendMessage_(ttip,#TTM_SETTIPTEXTCOLOR,#Red,0)
SendMessage_(ttip,#TTM_SETTIPBKCOLOR,$CBFEFD,0)
SendMessage_(ttip,#TTM_SETMAXTIPWIDTH,0,180)
SendMessage_(ttip, #TTM_SETDELAYTIME, #TTDT_AUTOPOP,5000)

ti.TOOLINFO
ti\cbSize   = SizeOf(ti)
ti\uFlags   = #TTF_IDISHWND | #TTF_SUBCLASS 

CreatePopupImageMenu(0,#PB_Menu_ModernLook)
MenuItem(0, "Original Image")
MenuItem(1, "New Image")

If CreateStatusBar(0, WindowID(0))
  SendMessage_(StatusBarID(0), #SB_SETMINHEIGHT, 28, 0)
  SendMessage_(StatusBarID(0), #WM_SIZE, 0,0)
  SendMessage_(StatusBarID(0), #WM_SETFONT, FontID(0),0)
  AddStatusBarField(460)
  AddStatusBarField(160)
  AddStatusBarField(160)
EndIf
;   SBH = StatusBarHeight(0)
StatusBarText(0, 0, "Ready",#PB_StatusBar_Center)
StatusBarText(0, 1, "Width = 0",#PB_StatusBar_Center)
StatusBarText(0, 2, "Height = 0",#PB_StatusBar_Center)

SetActiveWindow(0)
SetWindowCallback(@WindowProc()) 
hdc = GetDC_(0) 

For gad = 3 To 15
  If IsGadget(gad) <> 0
    DisableGadget(gad,1)
  EndIf
Next
Repeat       
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      CallFunction(0,"GdipDisposeImage",*image)    ;Very Important
      CallFunction(0,"GdipDeleteGraphics",*Localgfx) 
      CallFunction(0,"GdiplusShutdown",*token)
      CloseLibrary(0)
      Quit = 1
      
    Case #WM_MOUSEMOVE
      GetCursorPos_ (@pi.POINT)
      wGad = WindowFromPoint_(pi\y << 32 + pi\x)
      gad = GetDlgCtrlID_(wGad)
      Select gad
        Case 1 To 16
          SetCursor_(HandCur)
          ti\uId= GadgetID(gad)
          SendMessage_(ttip, #TTM_SETDELAYTIME, #TTDT_INITIAL,10)
          Text$ = gtext$(gad)
          ti\lpszText = @Text$
          SendMessage_(ttip, #TTM_ADDTOOL, 0, ti)
      EndSelect
      
    Case #WM_KEYDOWN
      If IsImage(0)
        If EventwParam() = 40
          mWheel - 0.1
        ElseIf EventwParam() = 38
          mWheel + 0.1
        EndIf
        If mWheel > 5
          mWheel= 5
        EndIf
        If mWheel < 0.1
          mWheel = 0.1
        EndIf
        SetCursor_(LoadCursor_(0,#IDC_WAIT))      
        CopyImage(0,NEW_Image)                      
        ResizeImage(NEW_Image,ImageWidth(0)*mWheel ,ImageHeight(0)*mWheel)
        StatusBarText(0, 1, "Width = " + Str(ImageWidth(NEW_Image)),#PB_StatusBar_Center)
        StatusBarText(0, 2, "Height = " + Str(ImageHeight(NEW_Image)),#PB_StatusBar_Center)
        StartDrawing(CanvasOutput(0))
        Box(0,0,GadgetWidth(0),GadgetHeight(0),$FFFFFF)
        DrawAlphaImage(ImageID(NEW_Image),GadgetWidth(0)/2-ImageWidth(NEW_Image)/2,GadgetHeight(0)/2-ImageHeight(NEW_Image)/2)
        StopDrawing()
        SetCursor_(LoadCursor_(0,#IDC_ARROW))
      Else
        MessageRequester("Error", "No image loaded", #MB_OK |#MB_ICONERROR)
      EndIf
      
    Case #PB_Event_Menu
      Select EventMenu()        
        Case 0,1
          If IsImage(0)
            sFile$ = SaveFileRequester("Please choose file to save",""," All supported formats|*.bmp;*.gif; *.jpg; *.jpeg; *.wmf; *.emf; *.png; *.tif;*.tiff;*.tga| TGA image (*.tga)| *.tga| TIF image (*.tif)| *.tif| TIFF image (*.tiff)| *.tiff| PNG image (*.png)| *.png| BMP image (*.bmp)| *.bmp| JPEG image (*.jpg;*.jpeg)|*.jpg;*.jpeg| GIF image (*.gif)|*.gif| Windows Metafile (*.wmf)|*.wmf| Enhanced Metafile (*.emf)|*.emf",0)
            If GetExtensionPart(sFile$) = ""
              If SelectedFilePattern() = 0  Or SelectedFilePattern() = 6
                sFile$ + ".jpg"
              ElseIf SelectedFilePattern() = 1
                sFile$ + ".tga"
              ElseIf SelectedFilePattern() = 2 Or SelectedFilePattern() = 3
                sFile$ + ".tif"
              ElseIf SelectedFilePattern() = 4
                sFile$ + ".png"
              ElseIf SelectedFilePattern() = 5
                sFile$ + ".bmp"
              ElseIf SelectedFilePattern() = 7
                sFile$ + ".gif"
              ElseIf SelectedFilePattern() = 8
                sFile$ + ".wmf"
              ElseIf SelectedFilePattern() = 9
                sFile$ + ".emf"
              EndIf
            EndIf         
            Select LCase(GetExtensionPart(sFile$))         
              Case "bmp"                
                CallFunction(0, "GdipCreateBitmapFromHBITMAP", ImageID(0), 0, @*image)           
                nFileName$ = GetTemporaryDirectory()+"nSave.bmp"
                If EventMenu() = 0
                  SaveImage(0,nFileName$,#PB_ImagePlugin_BMP)
                Else
                  CopyImage(0,New_Image)
                  ResizeImage(New_Image,ImageWidth(0)*mWheel,ImageHeight(0)*mWheel)
                  SaveImage(New_Image,nFileName$,#PB_ImagePlugin_BMP)
                EndIf
                _DrawImage(nFileName$)
                GetEncoderClsid(#Bmp_Encoder, @encoderCLSID)
                CallFunction(0,"GdipSaveImageToFile",*Image, StringToBStr(sFile$), @encoderCLSID, 0)
                Clean()
                
              Case "jpg"                
                CallFunction(0, "GdipCreateBitmapFromHBITMAP", ImageID(0), 0, @*image) 
                nFileName$ = GetTemporaryDirectory()+"nSave.bmp"
                Debug mWheel
                If EventMenu() = 0
                  SaveImage(0,nFileName$,#PB_ImagePlugin_BMP)
                Else
                  CopyImage(0,New_Image)
                  ResizeImage(New_Image,ImageWidth(0)*mWheel,ImageHeight(0)*mWheel)
                  SaveImage(New_Image,nFileName$,#PB_ImagePlugin_BMP)
                EndIf
                _DrawImage(nFileName$)
                quality.l = 70 ; qualities can range from 0 - 100, with 100 being best
                With encoderparams.EncoderParameters
                  \Count = 1
                  \Parameter[0]\Type = #EncoderParameterValueTypeLong
                  \Parameter[0]\NumberOfValues = 1
                  \parameter[0]\Value = @quality
                EndWith
                GetEncoderClsid(#Jpeg_Encoder, @encoderCLSID)
                CopyMemory(?clsid_EncoderQuality, encoderparams\parameter[0]\Guid, SizeOf(GUID))               
                CallFunction(0, "GdipSaveImageToFile", *Image, StringToBStr(sFile$), @encoderCLSID, @encoderparams)
                Clean()
                
              Case "png"
                CallFunction(0, "GdipCreateBitmapFromHBITMAP", ImageID(0), 0, @*image)
                nFileName$ = GetTemporaryDirectory()+"nSave.bmp"
                If EventMenu() = 0
                  SaveImage(0,nFileName$,#PB_ImagePlugin_BMP)
                Else
                  CopyImage(0,New_Image)
                  ResizeImage(New_Image,ImageWidth(0)*mWheel,ImageHeight(0)*mWheel)
                  SaveImage(New_Image,nFileName$,#PB_ImagePlugin_BMP)
                EndIf
                _DrawImage(nFileName$)
                GetEncoderClsid(#Png_Encoder, @encoderCLSID)
                CallFunction(0,"GdipSaveImageToFile",*Image, StringToBStr(sFile$), @encoderCLSID, 0)
                Clean()
                
              Case "tif"
                CallFunction(0, "GdipCreateBitmapFromHBITMAP", ImageID(0), 0, @*image)
                nFileName$ = GetTemporaryDirectory()+"nSave.bmp"
                If EventMenu() = 0
                  SaveImage(0,nFileName$,#PB_ImagePlugin_BMP)
                Else
                  CopyImage(0,New_Image)
                  ResizeImage(New_Image,ImageWidth(0)*mWheel,ImageHeight(0)*mWheel)
                  SaveImage(New_Image,nFileName$,#PB_ImagePlugin_BMP)
                EndIf
                _DrawImage(nFileName$)
                GetEncoderClsid(#Tif_Encoder, @encoderCLSID)
                CallFunction(0,"GdipSaveImageToFile",*Image, StringToBStr(sFile$), @encoderCLSID, 0)
                Clean()
                
              Case "gif"
                CallFunction(0, "GdipCreateBitmapFromHBITMAP", ImageID(0), 0, @*image)
                nFileName$ = GetTemporaryDirectory()+"nSave.bmp"
                If EventMenu() = 0
                  SaveImage(0,nFileName$,#PB_ImagePlugin_BMP)
                Else
                  CopyImage(0,New_Image)
                  ResizeImage(New_Image,ImageWidth(0)*mWheel,ImageHeight(0)*mWheel)
                  SaveImage(New_Image,nFileName$,#PB_ImagePlugin_BMP)
                EndIf
                _DrawImage(nFileName$)
                GetEncoderClsid(#Gif_Encoder, @encoderCLSID)
                CallFunction(0,"GdipSaveImageToFile",*Image, StringToBStr(sFile$), @encoderCLSID, 0)
                Clean()
                
              Case "jp2"
                If EventMenu() = 0
                  SaveImage(0,sFile$,#PB_ImagePlugin_JPEG2000,GetGadgetState(14)/10)
                Else
                  SaveImage(New_Image,sFile$,#PB_ImagePlugin_JPEG2000,GetGadgetState(14)/10)
                EndIf                 
                
              Case "tga"                
                If EventMenu() = 0
                  tgaflag = 0
                Else
                  tgaflag = 1
                  CopyImage(0,2)
                  ResizeImage(2,ImageWidth(0)*mWheel,ImageHeight(0)*mWheel)
                EndIf
                sTGAformat()
                
                ;               Case "emf"
                ;                 sEMFformat()
                ;                 
                ;               Case "wmf"
                ;                 sWMFformat()
                ;                 
                ;               Case "ppm"
                ;                 
                ;               Case "pgm"
            EndSelect 
          Else
            MessageRequester("Error","No Image to SAVE",#PB_MessageRequester_Ok|#MB_ICONERROR)
          EndIf               
          
      EndSelect           
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 0
          Select EventType()               
            Case  #PB_EventType_MouseWheel
              If load = 1
                If mwheel.f > 5
                  mwheel.f = 5
                EndIf
                If mwheel.f < 0.1
                  mwheel.f = 0.1
                EndIf
                value = GetGadgetAttribute(0,#PB_Canvas_WheelDelta )
                mwheel.f = mwheel + value/10
                SetCursor_(LoadCursor_(0,#IDC_WAIT))
                CopyImage(0,NEW_Image)                 
                ResizeImage(NEW_Image,ImageWidth(0)*mWheel ,ImageHeight(0)*mWheel)
                StatusBarText(0, 1, "Width = " + Str(ImageWidth(NEW_Image)),#PB_StatusBar_Center)
                StatusBarText(0, 2, "Height = " + Str(ImageHeight(NEW_Image)),#PB_StatusBar_Center)
                StartDrawing(CanvasOutput(0))
                Box(0,0,GadgetWidth(0),GadgetHeight(0),$FFFFFF)
                DrawAlphaImage(ImageID(NEW_Image),GadgetWidth(0)/2-ImageWidth(NEW_Image)/2,GadgetHeight(0)/2-ImageHeight(NEW_Image)/2)
                StopDrawing()
                SetCursor_(LoadCursor_(0,#IDC_ARROW))
              Else
                MessageRequester("Error","No Loaded Image ...",#PB_MessageRequester_Ok|#MB_ICONERROR)
              EndIf
          EndSelect
          
        Case 1  ;Load Image
          Select EventType()
            Case #PB_EventType_LeftClick
              Beep_(800,100)
              For gad = 3 To 15
                If IsGadget(gad) <> 0
                  DisableGadget(gad,0)
                EndIf
              Next
              Directory$ = PathRequesterAPI( "Select folder :", GetUserDirectory(#PB_Directory_Pictures))
              Directory$+"\"
              ExamineDirectory(0,Directory$, "*.*")
              ClearList(img$())
              While NextDirectoryEntry(0)
                If DirectoryEntryType(0) = #PB_DirectoryEntry_File
                  FileName2$ = DirectoryEntryName(0)
                  ext2$ = LCase(GetExtensionPart(FileName2$))
                  If ext2$ = "bmp" Or ext2$ = "rle" Or ext2$ = "ico" Or ext2$ = "gif" Or ext2$ = "jpg" Or ext2$ = "jpeg" Or ext2$ = "jp2" Or ext2$ = "wmf" Or ext2$ = "emf" Or ext2$ = "png" Or ext2$ = "tif" Or ext2$ = "tiff" Or ext2$ = "tga" Or ext2$ = "ppm" Or ext2$ = "pgm"
                    AddElement(img$())
                    img$() = Directory$+FileName2$
                  EndIf
                EndIf
              Wend
              FinishDirectory(0)
              SelectElement(img$(), 0)
              If IsImage(0)
                FreeImage(0)
              EndIf
              If IsImage(1)
                FreeImage(1)
              EndIf
              load = 1                
              ResizeGadget(0,0,30,WindowWidth(0),WindowHeight(0)- 60)
              If ListSize(img$()) > 0
                _DrawImage(img$())
              Else
                MessageRequester("Info","No items available ",#MB_OK |#MB_ICONINFORMATION)
              EndIf
          EndSelect
          
        Case 3  ;Previous Image
          Select EventType()
            Case #PB_EventType_LeftClick
              If ListSize(img$()) > 0
                Beep_(800,100)
                mWheel = 1
                If Num > 0
                  Num - 1
                  _DrawImage(img$())
                Else
                  Num = Count - 1
                  PreviousElement(img$())
                  _DrawImage(img$())
                EndIf
              Else
                MessageRequester("Info","No items available ",#MB_OK |#MB_ICONINFORMATION)
              EndIf
          EndSelect
          
        Case 5 ;Next Image
          Select EventType()
            Case #PB_EventType_LeftClick
              If ListSize(img$()) > 0
                Beep_(800,100)
                mWheel = 1             
                If Num < Count - 1
                  Num + 1
                  _DrawImage(img$())
                Else
                  Num = 0
                  NextElement(img$())
                  _DrawImage(img$())
                EndIf
              Else
                MessageRequester("Info","No items available ",#MB_OK |#MB_ICONINFORMATION)
              EndIf
          EndSelect
          
        Case 7  ;Copy Image
          Select EventType()
            Case #PB_EventType_LeftClick
              Beep_(800,100)
              ClearClipboard()
              SetClipboardImage(0)
              CopyImage(0,1)
              ResizeImage(1,ImageWidth(0)*mWheel ,ImageHeight(0)*mWheel)
              SetClipboardImage(1)
              FreeImage(1)       
          EndSelect
          
        Case 8  ;Recycle Image
          Select EventType()
            Case #PB_EventType_LeftClick
              CallFunction(0,"GdipDisposeImage",*image)    ;Very Important
              CallFunction(0,"GdipDeleteGraphics",*Localgfx) 
              CallFunction(0,"GdiplusShutdown",*token)
              Beep_(800,100)
              Result = MessageRequester("Attention","Recycle Image ?",#PB_MessageRequester_YesNo|#MB_ICONQUESTION)
              If Result = #PB_MessageRequester_Yes             
                dFile$ = img$() 
                ;                 If LCase(GetExtensionPart(dFile$)) = "gif"
                ;                   RemoveWindowTimer(0, 0)
                ;                   NextElement(img$())
                ;                 EndIf         
                DeleteElement(img$(),1)
                SHFileOp.SHFILEOPSTRUCT
                m = AllocateMemory(( Len(dFile$)+2 ) * SizeOf(Character) )
                If m
                  PokeS(m,dFile$)
                  SHFileOp\pFrom  = m
                  SHFileOp\wFunc  = #FO_DELETE
                  SHFileOp\fFlags = #FOF_ALLOWUNDO|#FOF_SILENT
                  result = SHFileOperation_(SHFileOp)
                  FreeMemory(m)
                EndIf
                _DrawImage(img$()) 
              EndIf                 
          EndSelect
          
        Case 9  ;Delete Image
          Select EventType()
            Case #PB_EventType_LeftClick
              CallFunction(0,"GdipDisposeImage",*image)    ;Very Important
              CallFunction(0,"GdipDeleteGraphics",*Localgfx) 
              CallFunction(0,"GdiplusShutdown",*token)
              Beep_(800,100)
              Result = MessageRequester("Attention","Delete Image permanent?",#PB_MessageRequester_YesNo|#MB_ICONQUESTION)
              If Result = #PB_MessageRequester_Yes             
                dFile$ = img$()
                DeleteElement(img$(),1)
                ;NextElement(img$())
                SHFileOp.SHFILEOPSTRUCT
                m = AllocateMemory(( Len(dFile$)+2 ) * SizeOf(Character) )
                If m
                  PokeS(m,dFile$)
                  SHFileOp\pFrom  = m
                  SHFileOp\wFunc  = #FO_DELETE
                  SHFileOp\fFlags = #FOF_SILENT|#FOF_NOCONFIRMATION
                  result = SHFileOperation_(SHFileOp)
                  FreeMemory(m)
                EndIf               
                _DrawImage(img$()) 
              EndIf                 
          EndSelect
          
        Case 10 ;Find Image
          
        Case 12 ;Save As
          Select EventType()
            Case #PB_EventType_LeftClick
              Beep_(800,100)
              DisplayPopupMenu(0, WindowID(0),GadgetX(12,#PB_Gadget_ScreenCoordinate),GadgetY(12,#PB_Gadget_ScreenCoordinate)+30)   
          EndSelect
          
        Case 13 ;Print Image
          Select EventType()
            Case #PB_EventType_LeftClick
              Beep_(800,100)
              If IsImage(NEW_Image)   
                If PrintRequester()
                  If StartPrinting("PureBasic Test")               
                    If StartDrawing(PrinterOutput())
                      DrawAlphaImage(ImageID(NEW_Image), 200, 600)                 
                      StopDrawing()
                    EndIf             
                    StopPrinting()
                  EndIf
                EndIf
              Else
                MessageRequester("Attention","No Image ?",#PB_MessageRequester_Ok| #MB_ICONQUESTION)
              EndIf
          EndSelect
          
        Case 14 ;JPG compression ratio
          SetFocus_(WindowID(0))
          
        Case 15 ;Settings         
          
        Case 16 ;Help
          Select EventType()
            Case #PB_EventType_LeftClick       
              Beep_(800,100)
              aboutCB()             
          EndSelect                                 
      EndSelect
  EndSelect         
Until Quit = 1
End
Edit : Modified
Last edited by RASHAD on Wed Feb 10, 2021 7:42 pm, edited 1 time in total.
Egypt my love
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4664
Joined: Sun Apr 12, 2009 6:27 am

Re: Load and Save Many Image Format [Windows]

Post by RASHAD »

Part #2:

Code: Select all

DataSection
  
  LoadImage:
  Data.q $0A1A0A0D474E5089,$524448490D000000,$1600000016000000,$719A360000000304,$544C503000000008
  Data.q $A16BADC47AA9AF45,$7ABFDBACB18D98B1,$D3F1E1D19F81CAE9,$D58FD6F38ED5F38C,$FFFFFEFFFEFAF6ED
  Data.q $FFFFFFFFFFFFFFFF,$0000003913DF89FF,$FFFFFF534E527410,$FFFFFFFFFFFFFFFF,$55FED90000000000
  Data.q $4144498C000000FB,$0C008FF863D31854,$5686968687A7B1C4,$CE67225D23B307EC,$1E18199EC21BBE9C
  Data.q $397862733E2A153E,$73C6A2153E511D82,$5D943F7B2072C4E6,$9CE8EEC61B3931D1,$9C9C6C6CD3530666
  Data.q $969C9C4F947B620F,$9D2C96C81BBD6696,$903F7B38D8D8D938,$B364E67338DA1E2D,$6D90216868B620DD
  Data.q $505035D05EA41BBD,$3F63204FD7621050,$17F5E3761CBFFDCC,$A9E33880B3A86500,$4E454900000000D8
  Data.q $826042AE44
  LoadImageend:
  
  arrow_left:
  Data.q $0A1A0A0D474E5089,$524448490D000000,$1800000018000000,$2059120000000304,$544C5030000000CB
  Data.q $2407120F050C0A45,$168D6E0E48360C2E,$E4BF26D6AE21AD8A,$E8BAF1E932EDC82F,$52F7DE48F6DA98F4
  Data.q $FDFCF2FBF95DFCE6,$0000007263AB1CF5,$FFFFFF534E527410,$FFFFFFFFFFFFFFFF,$A007730000FFFFFF
  Data.q $414449F10000006B,$C24EB1902DD31854,$C11E011F7F861450,$940D2613A1C12037,$00613261A4189086
  Data.q $670D4B0B2AD1738D,$BC4C350626171707,$B3DA0E3365C38302,$E5A73D7A5C4377B1,$6B039D3BDDF7CE5B
  Data.q $8811521FD6ED366D,$C79A5E965F5F6E8F,$871AFA5B7E62BC7C,$CE6242F1DF08CAF6,$31899AC8B7DDE726
  Data.q $912BDF8A41DB121F,$EBF996DD8273E350,$4E93989E1A9F8594,$650929BCC7A3EC1E,$CC4A34549C5A1EE6
  Data.q $233189CA1ACCB443,$8834034403CE2934,$9117E3A020118FCE,$BB0704C42E889887,$B0D7DC2443BA289B
  Data.q $BAB205C235F664F7,$60BAECC2B2B86A3E,$72EAE1159DFC48E8,$84838A74BF50D676,$F66C75C53AEBA0D5
  Data.q $44B07FDA651F56EC,$00002C2E59EEB1A2,$42AE444E45490000,$8260
  arrow_leftend:
  
  arrow_right:
  Data.q $0A1A0A0D474E5089,$524448490D000000,$1800000018000000,$2059120000000304,$544C5030000000CB
  Data.q $2407110E050B0945,$168A6B0F45350C2E,$E4C025D4AC23A887,$EAB1F3EA31ECC732,$49F8DC4FF8DD9BF6
  Data.q $FDE7F4FDFCEAFBF9,$0000003CEE4FF25C,$FFFFFF534E527410,$FFFFFFFFFFFFFFFF,$A007730000FFFFFF
  Data.q $414449E60000006B,$DDEEF77863D31854,$1DFA4095AE21E9DB,$52D672B9925D9003,$FFFFFAD54A670877
  Data.q $AF7B9E7104F52D57,$3901E64ABF040DDF,$EF9ED58306EFFE53,$77AAB206FF7ADE18,$3E79E18EF25FDEEF
  Data.q $B863A97CE40E6388,$FFFFFFF294041FF2,$0902A8E10A50C76D,$FFFC040B2070864F,$105FFFF9F0670FFF
  Data.q $D9F0654FFFF78404,$9777AC0401805BBD,$4640D98074747830,$91D1D2C3941B830A,$33B85500E50610CA
  Data.q $B0902B0300807494,$747444E60192B864,$D87100F73C31D9B4,$34B75BC31E79B880,$9D9432617A067028
  Data.q $1E6254299CF2096A,$30E096C18560DBD8,$12D9C435C4D93778,$8D360D4DDEEF2012,$C8F79E8EC900D104
  Data.q $4900000000CD1D8D,$826042AE444E45
  arrow_rightend:
  
  Copy:
  Data.q $0A1A0A0D474E5089,$524448490D000000,$1000000010000000,$FFF31F0000000608,$4D41670400000061
  Data.q $8A0537C8AF000041,$58457419000000E9,$72617774666F5374,$2065626F64410065,$6165526567616D49
  Data.q $00003C65C9717964,$CB38544144492902,$86144154683DD375,$6EB26CDDCCCCF7E1,$49304292827F1576
  Data.q $148B51188B415625,$5A28A530411B4A9A,$6097B0B1A09DA089,$1312274EB4AC0421,$92698865A80C1251
  Data.q $EE77FFB8C6B82488,$4CD3DD9282BB8B1C,$76323333CE63E733,$18CC747CDECBC3EF,$AF0D2A8820268A8A
  Data.q $7A54B379F36A9D95,$E5C943A75E353F36,$6DCE1FDD5E9F8B47,$012712A820158396,$8DC5A59B617A6167
  Data.q $BD3DCF6E37D7DF37,$A94F488C60176D50,$B023FAF94B6576AA,$974F663D79F099BC,$B9FF48E8C8A86463
  Data.q $0A30274EDDC2FEDC,$58C856320EB20562,$DA18D76E6C319B21,$5CF5F7F40B27130B,$A0B2204400E014ED
  Data.q $FF2ECC33AC856A0A,$07C703EF1EF0DA3E,$CA82454BFA6B710F,$345FD5ADAFAFDD4E,$A735E353F327A54B
  Data.q $084A2A5A63582080,$5B30F67EB98E234A,$19B2D3D7D36A40E5,$31B8B4B07ED85E98,$9085538AE6637A3C
  Data.q $9219C640AC042276,$6314B6565559F944,$83339E6A7607D894,$C5CC65C9150C8CDD,$C011554EC7E5D799
  Data.q $4940560A08623019,$26D7FD14674BACD7,$375D73B302C1C4E2,$2DC77F6F82486A0D,$E125AB365AE0271B
  Data.q $067225355F836ADD,$7FE28197C36D6A27,$AC1188B2E86C9DCD,$9912A366E2E028B5,$822305518D90AE7C
  Data.q $41095446CED09A48,$5DBF44F9C1541110,$D68029E9A078FC9B,$8FA7132C17CEED20,$03B740C80131B2EC
  Data.q $376B1A9E4CCDC555,$6BBC12714B87A5FF,$4C1043D4155D953D,$ABED36A5D6A24FC7,$A86D3AE23048CBE1
  Data.q $B2EDF7E4C8A5EAD6,$A6FA825E9AD21D21,$BFDE77F380DB6AA8,$FE5681F4C00646B5,$E42E52682558B4DA
  Data.q $291BFF97173FEEA2,$49000000007AA4ED,$826042AE444E45
  Copyend:
  
  Cut:
  Data.q $0A1A0A0D474E5089,$524448490D000000,$1000000010000000,$FFF31F0000000608,$4D41670400000061
  Data.q $8A0537C8AF000041,$58457419000000E9,$72617774666F5374,$2065626F64410065,$6165526567616D49
  Data.q $00003C65C9717964,$CB38544144491A02,$AC2E033FFFFFF863,$3CF97AAECB53359A,$E030D4B8AC49C4C9
  Data.q $BAFB66597AAEC033,$8B22702762444FD3,$E700CA22624C278B,$01FD5CF7737995BA,$867D294C4C3F0174
  Data.q $E01944ADBAEB4FAE,$FF7B89DD64BAB8DE,$0912F881CAA65365,$7D24F8BB6F27D593,$B2D3E019446DEEFA
  Data.q $52E5FF6795C0FAB6,$DCCECBF4C508A9A7,$8A1F971DF4CEF979,$F68080CA20944DC6,$90AFFDBDEEE72DF5
  Data.q $87D3B9F37FB93D36,$9ACD3690A3FF3DAF,$F979D4DAE90C40E8,$BB7FCF9B7DFFC7D1,$3945B2F37FEBF2F3
  Data.q $94381C6DAF02C544,$DC6A05DF75B7FB23,$173B29C4FFD1F672,$A329349721468C10,$D25E36EA9DABB9CC
  Data.q $B39EFA7D24B798C9,$DB713F1FF87C1E17,$0806BC1646E0C151,$584EDE350049A739,$539F0BBCC87FE775
  Data.q $FF8DD7733FFABF37,$6EB9DE1FF8FF5F0F,$8C035E23B865AF0F,$AFED7A5B89ACE6B2,$7F9E77849D816F94
  Data.q $F3BDEF67FF27DAC2,$BFB7D3FFF7D9E97F,$CF597FC6ECBB1FFF,$FBED7578069C14B4,$7946BF1C02B758E4
  Data.q $64BFFE786DA7A6D3,$D7FE9F1BE97FA9D1,$65C777B7D0729B8D,$393C0DB85FF582EB,$D479F5B4D2E01AB0
  Data.q $4D1DD69B1C2F6B92,$1BF2DE59BFE6F6DB,$F23D4E075E6B39E6,$50E656561EAF2419,$5634904590BFFDB1
  Data.q $1FA702C3CB82E403,$9CB33FC6ECB5137F,$334C25034CB9A765,$A717F1705F0C3C56,$FB1CDF56599CA396
  Data.q $70057D8D787F2DD2,$479884BA6B8882C6,$58FF371FAF8C0296,$7FED27FDFFE7A6F2,$45A4A37FEEFAB49A
  Data.q $EC5E863C8DCA4837,$FB6D97DBAE0B8986,$B7918F01E4BA926E,$D79E38C9001ABA08,$0000000089BA839D
  Data.q $826042AE444E4549
  Cutend:
  
  Delete:
  Data.q $0A1A0A0D474E5089,$524448490D000000,$1000000010000000,$FFF31F0000000608,$414449D602000061
  Data.q $134F4D9355CB3854,$45E00F927BC61C41,$1A98C411463017C3,$6895534018221A88,$268207280B4213D4
  Data.q $89A0813104250344,$18BD4189ABC40F1A,$42A85B40214A1140,$CB6A16D82214BC34,$BBBB676DB2FA5B4B
  Data.q $6FC396DA977FE3ED,$33FE7997E6766677,$BEAC9FA4BAA002AB,$23DD9F3CD06B3BDA,$4CADBF2178530462
  Data.q $454BCC7B2AC33BD3,$E487830DC557A62D,$D34CCFE51E51FF35,$1FC97845EDF330BE,$0C32C2F832E7E1E1
  Data.q $BDD09B03F4309E2B,$101CE60C35168B59,$9A4131C3779B7654,$8A6EB0886EB00A71,$5C98E23B308A7598
  Data.q $43022F0116CDF1E3,$7AFB406F3FE831AB,$B82D272871BE762D,$8FF871A2858963D2,$70E29B845287F6A8
  Data.q $0B7561EA158D6416,$EF13279289BAFAE8,$D3F05930B1E83B33,$F85C91A5C9A1C125,$13FA6010DF7C24FB
  Data.q $94EFEBC42E6542C7,$B4A28813B1131C28,$58E24608203C4A7D,$947023F4F25848F4,$B4A392EF31EB4F86
  Data.q $2F8A2D830AD05421,$9D52084217061C4B,$B6E8A82D2C4D3ACA,$6DB092B6560900B0,$14FA0436F6FCB025
  Data.q $043970D4B14FD879,$40C18EFE30F3AD4C,$64B53D9404440875,$3B756093F024E504,$D947EDAEB842B0A9
  Data.q $D3C0B958547328A3,$99DA5049F9164714,$0E2E3E6165DCB825,$7523DB0BBCB16A5B,$1CC457F5F8ED70AA
  Data.q $B0DD88589DA199C5,$99A769412C8E9280,$ADB608A96DBCE979,$84B34A3A61694476,$C22623E43F094DF9
  Data.q $A4A08CE66D0BC854,$49DD963C43B6CCC3,$71D8D511503FBA2C,$0D454E54E096D44B,$C049663774AC0937
  Data.q $8B8233265A8A0484,$E21CDC3209E6266D,$AA1977AB0A98F1F1,$2B60C6E3C0355DA8,$807BA16F8769E556
  Data.q $4D36CE12E3444341,$CFCB99278FC50464,$E84F8A9144BACF60,$9D72FB2A9C07797B,$D4142284445C6E83
  Data.q $E1D444F37502321B,$4A37A812261B268D,$FD4350A4B8ED24CA,$E5AA22637B88A35A,$A938913AD74498FE
  Data.q $F663FBC282D2E11D,$EEC258F8761F10DD,$2F0A7AC31BBEC18D,$FA0498E795C82827,$7ABC7832648912DF
  Data.q $98D0C0F3382D3978,$F3F833A82B1D1BAF,$453B28DD1A5946EB,$4E042AD1F646E9E4,$E56B866AF31B0CD4
  Data.q $88B80395C000FFB5,$490000000045A828,$826042AE444E45
  Deleteend:
  
  Find:
  Data.q $0A1A0A0D474E5089,$524448490D000000,$1000000010000000,$FFF31F0000000608,$4D41670400000061
  Data.q $8A0537C8AF000041,$58457419000000E9,$72617774666F5374,$2065626F64410065,$6165526567616D49
  Data.q $00003C65C9717964,$CB38544144492502,$9825033FFFFFF863,$B479CFF73406EA81,$FEE713ADFF9EC364
  Data.q $876607582F27F107,$E68A80CA22DEA6C6,$0069061C76EB47BE,$F66FBFF35451901B,$2035E09F8340FF8A
  Data.q $FF25F4D77FE4BB29,$FF349B6FFEA73B6B,$370700D81DA589BF,$AA0BFF752559FF9F,$15CBAEF65662C15A
  Data.q $C099458504795494,$B6A8A393B3582C06,$85A9D8366FA9A3DD,$BBFEC3FC3DFF6DD5,$1FF86B29CFFC0578
  Data.q $7FE9A7223FF7969B,$80A65A4BFF65C4ED,$D9D8D8AA79B9B8E5,$659ABB984C06C119,$F5DBAD170FF5C2CA
  Data.q $AE27AB8C09BCB73F,$4B7DFFAEF9653FFA,$6D7FE1BE9C6AFFB6,$C3FFCDB9D1FFFCEF,$796166642EC10B93
  Data.q $E800360CC0C0C0C0,$FC6F16D3CD90565C,$94E7E41FFF5A5D9F,$D5FF39C9D1FFF2DC,$13025C8236C0F4B4
  Data.q $07F862EA002F4B8F,$592A0AD20360ACC4,$FD3AD85A7E6342FD,$FB616C6FF88C0AF7,$F282ACBFF8DF5B5F
  Data.q $B919490371311153,$FEFE81FF521262AD,$FF8F979FF92E2A2F,$4C01A03BE323233F,$0A0C3A8A09F440F0
  Data.q $E5B55FFCCF875DB8,$B60140CB19EEFFC0,$B2A2B3A9AAA72402,$E5810E3BB5FFC265,$2518782FC7C23140
  Data.q $3457E4FF827CDC16,$467C7FE8BA000D83,$3920ABF3633D7FE1,$203200314157CDA0,$7FF5617A7FE2BF35
  Data.q $BA3806283FAE4E0E,$A1A453001987FEFB,$42519D455153FFAD,$800660E0281DF65A,$018A3FED959582C2
  Data.q $20250678E06E8ED6,$FD991AEA60500290,$0AE355495F9FFA07,$6180E4C12C5000C8,$5898188128006A80
  Data.q $9B40FFE7E80F0382,$A20607FC2ACB4BFF,$FFB8B939B7BFD014,$0018A07D141DE303,$9E0031522665DA63
  Data.q $00753C5A0E8D6832,$AE444E4549000000,$826042
  Findend:
  
  Paste:
  Data.q $0A1A0A0D474E5089,$524448490D000000,$1000000010000000,$FFF31F0000000608,$4D41670400000061
  Data.q $8A0537C8AF000041,$58457419000000E9,$72617774666F5374,$2065626F64410065,$6165526567616D49
  Data.q $00003C65C9717964,$1918544144495102,$001C65968831C105,$9C9E7DEFBEF3DFF0,$5E6095A457411DA6
  Data.q $B4360D68B64520A1,$0D191414D2D0435C,$2D056D8D84110E4E,$D50D290510450E0A,$04441041815852D2
  Data.q $9DF29E59E156DE15,$FBF7FFF3CFBDF7D7,$11F07E5FE704CC95,$AC2EA79B800002FC,$7A5EE728000005EF
  Data.q $77CB5DB585BC51E0,$00FFAEB6B38DE17B,$DBAFB3C3E63AEE96,$0BA9D2E11F05BADE,$5E67A5C0600117EB
  Data.q $F3FD7B9EF96FB339,$CC816D9B5332FBD5,$CA4F474B3EC8E274,$2E2CF7BFCECFB5CC,$B3EE5797FB80C002
  Data.q $C9FEB6DE3115FBF9,$B4A51FCF5D22643B,$06ED8F579677F3F1,$751D45CEB2018000,$DB8FA665568B0FFB
  Data.q $2DB7F37004432D69,$BCF3F77D5ED3F8E5,$1EBFF5CFF5F95B31,$A368807B6D6E7CBB,$A43FECDA6718A3A8
  Data.q $0D31B55B9F378436,$F88FE8616C699105,$3EAFE97DC3E6CAE0,$133A88070717DAF9,$CEBBE93214A192AD
  Data.q $6975D48D8FE9DB8D,$3B43D4F576D6E1AC,$F95BA4D2D7B43F1D,$3A8B9D441D4FDB36,$FA06D44DA8B9C6D7
  Data.q $B17D262FA4C0E2C2,$4EE876DCDB5CE938,$0181E63A8F627C5E,$B1886B2E71C99C62,$C9E85852A62DA991
  Data.q $37FD5CE87162FB24,$0B0EFF7C799EFF4D,$189B5173A8806743,$7D1454C8A441A89B,$A57A3B24452501D7
  Data.q $26C7201897BEFA2B,$0080236A26D44DE7,$4C94E864C2FA1145,$B1D4032645294511,$4491B189AD13636A
  Data.q $F4913A574743054B,$1A6640E761302E85,$6B26B64D8C55E720,$00000062A2D048C8,$4E9EDE5C06289591
  Data.q $B5136B2AB7DAEC4F,$0017B14EACC18991,$780CAE8954EACC00,$00A38DDD3F2FEBFB,$F603BA16F3F0ED70
  Data.q $500A514AE9328E2C,$9992F3AC887777D0,$E9BFEF99E4E00000,$20A2DC856E9072BB,$5A59EE9B644A5141
  Data.q $38134935AF3FF9D8,$490000000085FD33,$826042AE444E45
  Pasteend:
  
  Save:
  Data.q $0A1A0A0D474E5089,$524448490D000000,$1000000010000000,$FFF31F0000000608,$4D41670400000061
  Data.q $8A0537C8AF000041,$58457419000000E9,$72617774666F5374,$2065626F64410065,$6165526567616D49
  Data.q $00003C65C9717964,$191854414449FE01,$0618555D8B3DC105,$9282433BECCFB5D0,$560A0344448460A8
  Data.q $827F15A3F1206501,$A522D0422A916885,$A16308A222565636,$2295616282760AD8,$12B442C54EC11616
  Data.q $1F7EF67B99DE0CC5,$1E16F77C6F876AD7,$268E91F70278F3C3,$2A94934B2CD2DEC0,$DF5D3DBCFC6FECFF
  Data.q $7D3C765FCBF1F3BB,$1E2EA79A75DAEB74,$DECB5BB11BB15208,$B6F1C6B458399CD2,$7C79FEBF73CC9F1C
  Data.q $C6F0E4F97E6FF3E5,$E7757C20BC16E7D7,$AA0FE1F9B892155F,$37669659BD366B42,$D7F4B4DA5196BB62
  Data.q $8FFD8399D0FCBA5E,$3ACA3AC554123C16,$5537A6C7BE8AD602,$77F7C4847595DDB1,$FD8E9ED9ECDFD9EF
  Data.q $2C0AEED882A3B38E,$6B2734D17D3611AD,$8FE2542A25469ED9,$12267D275A484EBF,$E9B15FAFDBC0474E
  Data.q $8CB4EFF8CEB0BE8B,$A4A63ACAA444552A,$8FD9FBBC489AB474,$461A2FA6C6966B5A,$41FE7F38002518C5
  Data.q $9AA94A85D123D8EB,$510213469170BE1E,$35A2AA895124AAA1,$D0092730E9483AEB,$448244124551A012
  Data.q $1874A49B5D65244B,$A4491234D11010B3,$9CA22A535512444A,$E77842B313A521AE,$D6E0000000004B95
  Data.q $35A5F4A488C64FD1,$0075F6E0F84888B3,$873991EAF3700000,$700D1551AE8908DD,$6A00000000ABD2ED
  Data.q $34ACC927A506B996,$00000005FEFF6E02,$33AD39CD17D1F678,$F8F51BB6FC57A492,$FB9F378D6ACF9733
  Data.q $CBFB85C000000014,$DF6F8DE1DBBF819C,$9280792AB924F24F,$89148A4948A49484,$3FFBB96D3DC84824
  Data.q $A2B0106D8B6E7C21,$444E454900000000,$826042AE
  Saveend:
  
  Print:
  Data.q $0A1A0A0D474E5089,$524448490D000000,$6C0000006C000000,$4A487D0000000304,$544C5030000000FE
  Data.q $6F5A56563E3A3A45,$B0A3928F89827775,$C7BBC0BCBAAEADAA,$EAE6E6DCCFCCC3C9,$FBFBF781F980F3F3
  Data.q $FF8080FF8080FF80,$000000A0BD44D980,$FFFFFF534E527410,$FFFFFFFFFFFFFFFF,$949FCD000000FFFF
  Data.q $4144494601000086,$C54ABDD8EDC35854,$59AAE208F1C01430,$803CC9C104112CEE,$41E01FB321159C4B
  Data.q $9B3D2745C4493BA7,$2F8B304DC5C42A28,$045BF187C0728821,$27115EDAE5AF6A4D,$6872DF9A153FE4F5
  Data.q $996644A3FAF1529A,$E10BBAE888F55665,$742AE88E707B378C,$ECF6043D6E70013A,$61A2E896B03A77D2
  Data.q $DF6C9491C5967F9C,$18FD3842CF669A74,$2F63F06DCE0851E7,$0A347AA8B05B8844,$0873D88CD74488CB
  Data.q $BA27AD294F7E2B00,$8043F98D4AD688C5,$B627DE4F6071DB6A,$7D7BC4A654B1652B,$CC7F7AD64B05BAE9
  Data.q $A10A6E1AEFA71588,$0EE2189037A8B0D4,$10BCDBF6900F7623,$A002B4C1B0350E52,$3358710B59DD88CD
  Data.q $D8D94CDFA213D589,$76AB738C6B76231C,$AC72B7A5EA82BD36,$F6416374B099C23A,$2C8D2B87C58FC5A8
  Data.q $3B6E20C6E744519E,$AD38A89C6A57AC57,$BB2B3F7F267C6EB4,$2FCBF27AD21A9AD1,$1AAE7E81CACCFFBC
  Data.q $D99664EA7F963F21,$77770C0F21037A77,$4900000000F5296E,$826042AE444E45
  Printend:
  
  deletefile:
  Data.q $0A1A0A0D474E5089,$524448490D000000,$2000000020000000,$8AA4440000000308,$49427303000000C6
  Data.q $E04FE1DB08080854,$7359487009000000,$DD000000DD000000,$00000007A2537001,$666F537458457419
  Data.q $7777006572617774,$6163736B6E692E77,$EE9B67726F2E6570,$4C50A10100001A3C,$0000FFFFFFFF4554
  Data.q $F3FF1A59FF6699FF,$FF1D62FF1664FFAE,$185FFF4C83FF1D5F,$DBFFAFEFFF4B85FF,$FF56E4FF43DDFF3D
  Data.q $4D82FF195EFF53E1,$5FFF1A5EFF1A5FFF,$FDAFEEFFB0F0FF1A,$76E7FF1A5FFD2466,$5FFE76E5FF4D83FD
  Data.q $FE4D83FE65CCFF19,$5991FF1A5FFE4D84,$EAFE3D77FE1A5FFE,$FE3EDCFE2265FE8B,$40DDFF1A5FFE3EDB
  Data.q $5FFE3FDCFE4D83FE,$FE42DCFE4980FE1A,$32A7C12568FE40DC,$B7CF4AB5CD36AAC3,$DC67C6DB63C4D94E
  Data.q $74CEE173CDE169C7,$DCED87D9EA77CFE3,$F793E0F090DEEF8C,$A5EAF9A4EAF9A2E8,$EFFDA8ECFBA7EBFA
  Data.q $FE1B5FFE1A5FFEAD,$2B6BFE2A6AFE1B60,$7DFE3F79FE3E78FE,$FE477FFE467EFE44,$4C82FE4581FE4980
  Data.q $86FE4F86FE4D83FE,$FE5588FE5387FE51,$548BFE578AFE5589,$90FE5A8CFE588BFE,$FE6393FE5C93FE60
  Data.q $6A97FE4395FE6594,$9AFE6E9AFE6098FE,$FE6F9BFE639BFE6F,$68A1FE759FFE649C,$B3FE77B2FE7FA6FE
  Data.q $FE9DBAFE91B3FE79,$8DCAFF81BCFF3DDC,$D8FF8FCCFFB4CBFF,$FFD2E0FF9FDEFF9B,$DAE5FFD9E5FFD5E2
  Data.q $E7FF77E7FF75E7FF,$FFE0EAFF85E9FFDD,$ADEDFF98EDFF95EC,$F1FFADF0FFAFEFFF,$FFF1F5FFB1F1FFB0
  Data.q $F7F9FFF5F8FFF2F6,$009A9DD44CFFFFFF,$00534E5274310000,$25231A1716140501,$5C4D413532302C2B
  Data.q $A6937978766C6B6A,$DFDDCEB4ABA9A9A8,$F4F3F1F1EEE3E3E0,$FDFBFAF9F8F7F5F4,$3401000076976A92
  Data.q $6063CB3854414449,$0C7C2A05456EE060,$010F1EAD415D00A8,$ABE414043C9AF905,$4043CEAF905010F1
  Data.q $FAF905012F36BE41,$7D410334B41538FC,$2D50D060054E3495,$82E064472702A249,$93981910C8C1C0A1
  Data.q $50C7B0320DAD8561,$B7492C0C8C6268E0,$2970EC0C02CAC5C2,$7CA86B0305333670,$0323320B1A2B3E13
  Data.q $0D89282971641203,$0AAC4661037F0102,$0455D7C02083834A,$C4BCD0A0A4A6829B,$4E1D4F78BC88A0A0
  Data.q $3ABAB282830A0A2C,$655DBC8ABB2AA232,$EF2D0A0A0EC828B0,$5575F44B6AEBACEA,$79787B681520A2C2
  Data.q $2BBBA0504A7B5757,$9AE882A07482A62B,$573740A08CCEAEAE,$3561414139054C66,$AEBE691D5D15ED5D
  Data.q $2DB2390628AC580A,$0255CBC8ABACAC39,$06298809144580A2,$E31B9A5D01C6E485,$4168700580CEC1A1
  Data.q $E02B018855C7CA03,$E0300AA9FBCB0392,$E2CABAF252824C00,$532430BD001E106C,$000000008C289A6E
  Data.q $826042AE444E4549
  deletefileend:
  
  recycling2:
  Data.q $0A1A0A0D474E5089,$524448490D000000,$2000000020000000,$8AA4440000000308,$49427303000000C6
  Data.q $E04FE1DB08080854,$7359487009000000,$DF000000DF000000,$0000008E61AD0F01,$666F537458457419
  Data.q $7777006572617774,$6163736B6E692E77,$EE9B67726F2E6570,$4C508F0100001A3C,$6D4924FFFFFF4554
  Data.q $4733604A35604040,$325E4931604A335C,$5E4A325F4A335F49,$4A325E4A325E4A32,$325E4A325E4A335E
  Data.q $5E4A325E4A325E4B,$4C335E4B33604B32,$33614D33614C3360,$614D345E4B34634E,$4F355E4C35655034
  Data.q $377059366B553563,$7B62396752375E4B,$4F3B81673A5E4B3A,$3C856A3B6F593B5D,$8B6F3D5C4B3D5E50
  Data.q $8242987B4095783F,$44A586435E5543A0,$AE8D45A787445E56,$4B4A5E5949B19046,$4B5C574B8D754A5A
  Data.q $D5AD4FC9A44CC7A1,$B450D8B050997F50,$51D5AE519B8151DC,$5D5053E2B952DFB6,$BE53E7BD53E5BB53
  Data.q $54EABF545E6054E9,$5D61555D5055EBC0,$6A62564C61574C5D,$68C1A364D6B3635D,$554D6CCBAC6ADCB9
  Data.q $74725D716E5D716D,$765D77765C57765D,$524E7A5D7777E4C3,$D983EDCB7BECCA7A,$8C59588CFFDB84FD
  Data.q $5D868E5B5B8D5B5B,$5E9B5B5D995D8A94,$A45B5E9E5A8C9D5B,$4751BF5A60AB5C95,$52C45CA7C05196C0
  Data.q $CE509ECE54A0C746,$5968D35CB2D05CB0,$B4D45968D45AB1D3,$DC5CB8DA5968D65C,$51ACE24253E05868
  Data.q $C4ED5BC2E9596CE8,$FC4CB5F93F54F15B,$5870FE5BCEFD5BCE,$D0FF5870FF5BCFFE,$000000C6DF18175B
  Data.q $080700534E527411,$C1989784492D1918,$A8D5F5F3F2E3DAC8,$44499C0100005B31,$5FE5538DCB385441
  Data.q $0C2D63BA3D104102,$5BBB58C56EEEC56C,$E0540B0B140EC2D6,$F87F4438DB97770F,$33B13BB799BBDCBE
  Data.q $8756CC9BD2A1C492,$B42A5255E9366AC3,$DC3FB51BB0E03B46,$2B5069C12413836A,$FC234581480B1AFD
  Data.q $2F3F1D3605F81B3A,$1DE8285BB76E79FC,$1A85A10F877F716A,$1B590DC0C3CE4511,$24306E0C9EC1A108
  Data.q $841CFF600FF913EA,$BAFF91AD5216A2B5,$E2EFD841F5F21077,$36C94FE89FEE2326,$31D17AC210ADF342
  Data.q $58BBDD961457A495,$9994A8B87085E859,$C9D7960BBB8992F4,$268CCDD6315F11A7,$B3FC7BE9F8D94CC9
  Data.q $026668AC21FC9309,$80718E32ECA564B3,$558133941604CB49,$4C2782C515365072,$1C098737A146BAEA
  Data.q $EA11B688786E405C,$988680B867AA78F2,$ADBFE5321B73E725,$C5BC93410B34F0E7,$1C3DA0049B049582
  Data.q $B15732E524B15F0E,$38018ABE4EC126FF,$43A8DCA65A258AC7,$58A380545C0EB82C,$BB42850C7C183EEC
  Data.q $77E2DEABAB7251B4,$5AF0C63F73A44891,$85E3F36B1F4D5B46,$7B163D8D60B8F608,$4227F0848040E3EE
  Data.q $430315B9E2678304,$E4728C0D264927E0,$DA1CA723A5044608,$8BF4FB1DFF34D824,$EBDFEF2FD2F57E93
  Data.q $59A5AD75CBDC0DFF,$45490000000033A0,$826042AE444E
  recycling2end:
  
  help_4:
  Data.q $0A1A0A0D474E5089,$524448490D000000,$1800000018000000,$3D77E00000000608,$47527301000000F8
  Data.q $0000E91CCEAE0042,$0000414D41670400,$00000561FC0B8FB1,$0000735948700900,$D201120B0000120B
  Data.q $7419000000FC7EDD,$7774666F53745845,$6E69617000657261,$2E342074656E2E74,$F5AF694436312E30
  Data.q $54414449DF040000,$67934C6B95A54B48,$96DA7DB2FBABC714,$88AF05B41C4B25CC,$D3646EF3A6E9CD9A
  Data.q $9D4B694E64BB2E64,$4E2116E24BC52997,$32C975110EA1CDC2,$B4A59C5C593898BF,$65E6E9BACC8A0A80
  Data.q $0A502D14A2E5B160,$E77FCB4A5B4B4B13,$C93C48E8A8197D3C,$F39E5CFFCB9F692F,$7A3E9E96C46CAF3C
  Data.q $34B7F8605E2727EC,$50A31D2DAB166CFA,$DF4E96553793741B,$447CD7ED8DFDA576,$AC6F27DB97ADF4CF
  Data.q $BCFB5F928A68512C,$54A38DC8F96915F8,$5FE6BF6E6F394D6A,$5961CEBC848ADB9C,$CA6493187602DB9C
  Data.q $621A26C6C48D9914,$AF2139BC2CAAE8A7,$0DAF70F8ECB3F303,$F20EE180E2353F69,$86C7B1588D63D489
  Data.q $4581D77C2476D905,$2A3AAAB92E20B6DF,$9F1637866490A0D1,$585CFBA5B6F7E5B6,$59FC5643A481DBB4
  Data.q $7F70B31E3F7085DF,$C5605D4175D4AE3F,$F113AF64B0F7DDC2,$3BC313C4A88ECD9B,$EC96582F92E314E1
  Data.q $9B181426CCBCC369,$B7151FAFA05B0885,$BCE7C38BD2A1F802,$E62C27ABA3F0DC30,$EE7B4EC1BF7DE442
  Data.q $9BF9E37932653160,$E341D925E7CA9AD1,$716125126ACFCF9A,$8FA83EAEDBFD6696,$58952C72E2E517DC
  Data.q $C35880FAE613B071,$9B9FED1E633717E4,$1B2496635A311B71,$F86752AFAFE26531,$FA1D70F685DCE617
  Data.q $958C206F7A22FD42,$C47B42B661D3B7DF,$CA68912E3F360B85,$2B5E79768A603A31,$186081164486F1FE
  Data.q $DB4CB9D3E61B02AA,$2492FF46B47747FA,$D377948655C9932F,$BBD4AE1D576731EB,$715EB5F3981B47D1
  Data.q $22F67468EC730B90,$05883F71DCE4E3CC,$41078D4CF2952D9C,$8DFD9807D6CC631A,$C92C94589142B08D
  Data.q $9B9E9F97D71364CB,$8B4BDDEB85BA28D1,$80D197983D0DCB99,$239E5E86510EA394,$6CBBD99822FC396E
  Data.q $2CA3EE37FCF5ACA8,$FC760A1CC2DCE596,$C7463A7A88C633BA,$ED0B3B0DE2E0BA6D,$4A415DAD10FC20E4
  Data.q $C019D7BFFF21123F,$47C1AD4ACC7AFCCA,$3B4843FC6944EAFB,$FA93B186A03224DE,$DEF9BF74533DD128
  Data.q $C5111692C1C569D9,$3CB0FA746846F463,$3546696202E826FB,$0F7CC0F1C2FDDA9A,$982CD3B782D4C071
  Data.q $73CBFA7D96E55C92,$1C80B078F9567B52,$21FDBA2578A1A2F0,$6596201F37FB9C7C,$611B9C444773475E
  Data.q $55501A8EE660EC28,$E73CBE9344B80E22,$F0CD85691AA3B99A,$A8E6EF6D52C34204,$94578B5D42ABAF10
  Data.q $D49800E0074E43CB,$6E2606FAF8CC76E3,$B2DADC6D889488A8,$56B907C75D5F19B2,$528F85A6E085F03C
  Data.q $CEC247286E260E43,$EE11EEBCDD2DA24B,$4FBD2D767EF084F7,$64C874A94D6E3157,$60CBB6FA653E9572
  Data.q $9870C9C2DD6D1727,$D2E715E9C7713B6B,$E74DD6BE728F6245,$DFA55A20DCF41573,$B50C627CB3F3C924
  Data.q $D3A0370E689D8FAA,$C1E1D58C3CD147D3,$0D1A7CDACC32BA5B,$7757046F39C1DE6D,$F584F885EA0BAB10
  Data.q $F24A2FE5F5CADD67,$1775E2728AAB9311,$A6D2744E4CF24EC1,$6054CA0AD5FC94A1,$FB00C814E322B8B6
  Data.q $2EA149CF9C426D8C,$5629BB8D076494CA,$5FD938565A93725B,$CCDA0E883BA70ED2,$36963F0DBD7CEFF0
  Data.q $4820F6DE303CDB88,$0EFC39D45DD14EE2,$54FABAF0DBF13CD5,$53E215AFA169390C,$5BA585446A1D50CC
  Data.q $CB2A2E980953B488,$00D83EADCD397080,$774C6BB1113A8A0E,$5BC3724B464EABE5,$42D192654A93AAD4
  Data.q $CB75302A1B498267,$03B3FA919D47BC25,$240E851D821D65F9,$6EBC19B375305B64,$A26B8A6850B3BAC2
  Data.q $A71BA79925CBD33F,$3C9AD189CA9D5728,$B5906577E69ED7E3,$528328BEE3118D0C,$9627ACFA542B746B
  Data.q $22B2F4CAB51669E5,$1A149836AE4E94F1,$9420ADD8A932B343,$2B7137AD5CBB629A,$B894619B3F2CF43E
  Data.q $4D7FF4374BFAE2FA,$0AC5E87DA917FB26,$4900000000071F5C,$826042AE444E45
  help_4end:
  
  settings2:
  Data.q $0A1A0A0D474E5089,$524448490D000000,$1800000018000000,$3D77E00000000608,$47527301000000F8
  Data.q $0000E91CCEAE0042,$0000414D41670400,$00000561FC0B8FB1,$0000735948700900,$D201120B0000120B
  Data.q $7419000000FC7EDD,$7774666F53745845,$6E69617000657261,$2E342074656E2E74,$F5AF694436312E30
  Data.q $5441444964030000,$41134FDD56A54B48,$0D416D22A23FEF10,$268D1318D04A24A0,$1E4488A26A26A4FA
  Data.q $91F1A02103063414,$1F10C9E109A3C217,$4C052BBD00C0BF10,$A83BDDA11A8F8494,$96818248B4B42940
  Data.q $3BBD7338ED0B628F,$A5CBF24E3051ED7B,$76CCEDF9D9BFBB3B,$85A34609C4CC990D,$80B1C4CD8273333D
  Data.q $E0BC4C46FC116789,$72EB1564D7ACF337,$5A37FBE9E5871D7A,$64041D887785E664,$BCB9B7CE7131DB06
  Data.q $50BC8CD99E5E4B2B,$60776C9F5858E66A,$D1A65B79DE66EB76,$C5D4F1E48B589C37,$3A646AC2D99880FF
  Data.q $8AB11F90D73BC9AD,$039027B63C910C70,$F9AC984DA644A6CF,$057FA7441CC4F266,$DF616FC27C38B122
  Data.q $F71AABCD06489684,$AD72863A8F37C542,$86925E9901C2AD19,$6F77147090B3540E,$9A50A5FEB20419FD
  Data.q $C21860C41B90C6FF,$B0F8D59B18682DE1,$501C452A7224DADA,$F28B39D2F11725AB,$B10C2847F7D37E24
  Data.q $C88CCC0E8B2D3C78,$894AD5E8287EF39D,$C93CEA90B2951CA5,$12BC3F3ED3848B91,$426EAC731A30523D
  Data.q $ABCEA93FD538B31C,$29EE861C2360F876,$30C9E3A94D0F942F,$D1D5289A819D6271,$ED36C007F3E03CC2
  Data.q $8042860879A9AE85,$9D6BF92FC10BC009,$583496568726F209,$7C8EA902C44A2F58,$0216781CC4F5F74C
  Data.q $858E904A08818F30,$1EF8E3430CDF5815,$1C75FDA8182C09E4,$3C395B691030F212,$920FC7C884413E05
  Data.q $B074FCEE80EE5DE6,$A28133BEB6C194DF,$65AB075A781811CE,$37352C32E576B065,$40580995C8AE074B
  Data.q $751424E7A8B00A51,$DD6F4411E0F8808C,$A782144FBB921084,$F708B5D1AB95407F,$A0C9F87499381EED
  Data.q $3B49CF4FB4CA914B,$30F9F973E769C857,$942672972492FE78,$EE077B63711B1449,$86D39C15346DFE8E
  Data.q $87B39102532DA64D,$7D3B1F2479F2558F,$3EC6BF92F2B62E16,$6C0A167D8540152D,$4B7D7B832DCEB422
  Data.q $6346E5EA754041C3,$42CAA5595ED96B9A,$AFF5FF555B904F3B,$52A9EE515EC1982E,$657CEA4C76C6FDDC
  Data.q $BDE018175EAFE90E,$1965506F3DB420E2,$AC71C15CEEA33E2F,$AF54B09A1FAF09AC,$5C182FE2E8C1717D
  Data.q $91237CEAC1CCD35E,$50DC4636587B9993,$04FE52D063DD799C,$15705723485DCF86,$DA8185C0F8CF3F89
  Data.q $942CD07358A0E727,$7A8613E9941E25DD,$5A4B1C39D75EA495,$B5D741513AE50FA4,$F84E1AD5A64779C5
  Data.q $6AB3C39B5C1C3FBF,$BA3DC7168CDF4E99,$BB821381320975CF,$C21FBE7AB2D53CEE,$85AA8139757BED20
  Data.q $920518FDF34D340E,$905B3E022D9F04FB,$5329E24B67C4224C,$0FE183334AE7F9AF,$D6C09EDC402F6390
  Data.q $444E454900000000,$826042AE
  settings2end:
  
  IconHeader_32:
  Data.l 0,0,1,0,0,0,0,16,0,0,0,0
  
  Header:
  Data.l 0,0,2,0,0,0,0,16,0,0,0,0
  
  FrameDimensionPage:
  Data.l  $7462DC86
  Data.u  $6180, $4C7E
  Data.b  $8E, $3F, $EE, $73, $33, $A7, $A4, $83
  
  clsid_jpeg: ; clsid for jpeg image format
  Data.l $557CF401
  Data.w $1A04
  Data.w $11D3
  Data.b $9A,$73,$00,$00,$F8,$1E,$F3,$2E
  
  clsid_EncoderQuality:
  Data.l $1D5BE4B5
  Data.w $FA4A
  Data.w $452D
  Data.b $9C,$DD,$5D,$B3,$51,$05,$E7,$EB
  
EndDataSection
Egypt my love
IdeasVacuum
Always Here
Always Here
Posts: 6425
Joined: Fri Oct 23, 2009 2:33 am
Location: Wales, UK
Contact:

Re: Load and Save Many Image Format [Windows]

Post by IdeasVacuum »

Great stuff Rashad, thanks for sharing 8)
IdeasVacuum
If it sounds simple, you have not grasped the complexity.
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5357
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: Load and Save Many Image Format [Windows]

Post by Kwai chang caine »

Very nice and usefull code :shock:
Thanks to give us your baby, before even his born :mrgreen: 8)
ImageThe happiness is a road...
Not a destination
User avatar
kernadec
Enthusiast
Enthusiast
Posts: 146
Joined: Tue Jan 05, 2010 10:35 am

Re: Load and Save Many Image Format [Windows]

Post by kernadec »

Hi, RASHAD
nice code
Thank you for sharing
I have a memory access problem with my PC
[ERROR] Invalid memory access. (read error at address 37308)

Code: Select all

line 812 ->  StatusBarText(0, 1, "Width = " + Str(ImageWidth(NEW_Image)),#PB_StatusBar_Center)
Cordially
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4664
Joined: Sun Apr 12, 2009 6:27 am

Re: Load and Save Many Image Format [Windows]

Post by RASHAD »

Hi kernadec
Change to, and see if it is OK
Thanks for head up

Code: Select all

    Case #WM_KEYDOWN
      If IsImage(0)
        If EventwParam() = 40
          mWheel = omwheel - 1
        ElseIf EventwParam() = 38
          mWheel = omwheel + 1
        EndIf
        omwheel = mWheel
        mWheel = 1+mwheel/10
        SetCursor_(LoadCursor_(0,#IDC_WAIT))      
        CopyImage(0,NEW_Image)                      
        ResizeImage(NEW_Image,ImageWidth(0)*mWheel ,ImageHeight(0)*mWheel)
        StatusBarText(0, 1, "Width = " + Str(ImageWidth(NEW_Image)),#PB_StatusBar_Center)
        StatusBarText(0, 2, "Height = " + Str(ImageHeight(NEW_Image)),#PB_StatusBar_Center)
        StartDrawing(CanvasOutput(0))
        Box(0,0,GadgetWidth(0),GadgetHeight(0),$FFFFFF)
        DrawAlphaImage(ImageID(NEW_Image),GadgetWidth(0)/2-ImageWidth(NEW_Image)/2,GadgetHeight(0)/2-ImageHeight(NEW_Image)/2)
        StopDrawing()
        SetCursor_(LoadCursor_(0,#IDC_ARROW))
      Else
        MessageRequester("Error", "No image loaded", #MB_OK |#MB_ICONERROR)
      EndIf
Egypt my love
User avatar
kernadec
Enthusiast
Enthusiast
Posts: 146
Joined: Tue Jan 05, 2010 10:35 am

Re: Load and Save Many Image Format [Windows]

Post by kernadec »

the error is still there
this happens when I zoom in depth on the image and when I go back to the front it's the bug

[ERROR] Load and save many rashad.pb image formats (Line: 813)
[ERROR] The specified #Image is not initialized.

these t when the image is reduced to a minimum when zooming back the bug happens
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4664
Joined: Sun Apr 12, 2009 6:27 am

Re: Load and Save Many Image Format [Windows]

Post by RASHAD »

Try change to ,I hope it will solve the problem

Code: Select all

    Case #PB_Event_Menu
      Select EventMenu()
        Case 0,1
          CallFunction(0, "GdipCreateBitmapFromHBITMAP", ImageID(0), 0, @*image) 
          If IsImage(0)
            CopyImage(0,New_Image)
            sFile$ = SaveFileRequester("Please choose file to save",""," All supported formats|*.bmp;*.gif; *.jpg; *.jpeg; *.wmf; *.emf; *.png; *.tif;*.tiff;*.tga| TGA image (*.tga)| *.tga| TIF image (*.tif)| *.tif| TIFF image (*.tiff)| *.tiff| PNG image (*.png)| *.png| BMP image (*.bmp)| *.bmp| JPEG image (*.jpg;*.jpeg)|*.jpg;*.jpeg| GIF image (*.gif)|*.gif| Windows Metafile (*.wmf)|*.wmf| Enhanced Metafile (*.emf)|*.emf",0)
          EndIf
Egypt my love
User avatar
kernadec
Enthusiast
Enthusiast
Posts: 146
Joined: Tue Jan 05, 2010 10:35 am

Re: Load and Save Many Image Format [Windows]

Post by kernadec »

hi RASHAD
Case #PB_Event_Menu modification
does not work
but I found where the error comes from
by adding a test before resizeimage ()
it works, but after that it will remain to optimize

cordially

Code: Select all

       Case #WM_KEYDOWN
          If IsImage(0)
            If EventwParam() = 40
              mWheel = omwheel - 1
            ElseIf EventwParam() = 38
              mWheel = omwheel + 1
            EndIf
            omwheel = mWheel
            mWheel = 1+mwheel/10
            ; SetCursor_(LoadCursor_(0,#IDC_WAIT)) 
            CreateImage(NEW_Image,10,10)
            CopyImage(0,NEW_Image)   
            If ((ImageWidth(0)*mWheel)) > 0 Or ((ImageHeight(0)*mWheel)) > 0                      ;  new test
            ResizeImage(NEW_Image,(ImageWidth(0)*mWheel) + 1 ,(ImageHeight(0)*mWheel) + 1)
            StatusBarText(0, 1, "Width = " + Str(ImageWidth(NEW_Image)),#PB_StatusBar_Center)
            StatusBarText(0, 2, "Height = " + Str(ImageHeight(NEW_Image)),#PB_StatusBar_Center)
            StartDrawing(CanvasOutput(0))
            Box(0,0,GadgetWidth(0),GadgetHeight(0),$FFFFFF)
            DrawAlphaImage(ImageID(NEW_Image),GadgetWidth(0)/2-ImageWidth(NEW_Image)/2,GadgetHeight(0)/2-ImageHeight(NEW_Image)/2)
            StopDrawing()
             EndIf
            SetCursor_(LoadCursor_(0,#IDC_ARROW))
          Else
            MessageRequester("Error", "No image loaded", #MB_OK |#MB_ICONERROR)
          EndIf
    Case #PB_Event_Menu
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4664
Joined: Sun Apr 12, 2009 6:27 am

Re: Load and Save Many Image Format [Windows]

Post by RASHAD »

Hi kernadec
It is abandoned Project
But I will do my best to revive it again
First post Part #1 updated
Egypt my love
Post Reply