Michael Mattais is the author, he did a superb job - this code was shortened and updated for specifically JPEG's in resource files -

The JPEG will be in STRING format, you can send it over the internet or write it to a file...

Michael - awesome code- thank you -

'Resource should look like this:
#define BBSDOWN 1050
BBSDOWN JPEG BBSDown.JPG


Code:
' =======================================================================
' FILE: image.bas
' 10/20/08
' Using user-defined resources to store strings and getting them back easily.
' Returned string can be used for anything. This example specifically pulls a JPEG from the resource
' Note also: The "Resource Type" can be any one of the predefined Windows
' resource types, e.g., %RT_MENU, %RT_STRING, %RT_GROUP_ICON, %RT_RCDATA, etc.
' The values 1 through 255 are reserved by Windows for future "predefined"
' resource types. Individual 'numbered' resource IDs must be in the range 1-65535
' --------------------------------------------------------------------------------
' COMPILER           : PowerBASIC PB/Win version 8.4
' Win32API.INC  Date : August 12, 2008
' Author             : Michael Mattias, Racine WI USA
' Copyright/Use      : Placed in the public domain by the author 1/26/03
' Update Editor      : Scott Turchin
' Updated            : Updated for specific use to pull JPEG from resource 10/20/08 PB version 8.4
' ========================================================================

#Compile Exe
#Register None
#Debug Error On
#Include "Win32api.inc"
#Resource "RESOURCE/BBSDOWN.PBR"

Declare Function RetrieveInternalJPEG(ByVal rcNumber As Long) As String

'============================================<WINMAIN>==================================================================
Function WinMain (ByVal hInstance     As Long, _
                  ByVal hPrevInstance As Long, _
                  ByVal lpCmdLine     As Asciiz Ptr, _
                  ByVal iCmdShow      As Long) As Long
Local sTmp As String
Local hFile As Long
Local rcNumber As Long

rcNumber = 1050 'Assigned in my Resource file
sTmp = RetrieveInternalJPEG(ByVal rcNumber)

MsgBox sTmp 'Will be gibberish
'Stow the file to a temporary jpg
hFile = FreeFile
Open "Test.jpg" For Binary As #hFile
Put$ #hFile, sTmp
Close #hFile
End Function
'==========================================================================================
Function RetrieveInternalJPEG(ByVal rcNumber As Long) As String
Local LoadLibExhFile    As Long
Local LoadLibExFlags    As Long
Local hSource           As Long
Local hResFind          As Long
Local hResLoad          As Long
Local ResSize           As Long
Local ErrFlag           As Long

Local lResourceName     As Dword
Local lResourceType     As Dword
Local dwResourceType    As Dword
Local dwResourceName    As Dword
Local szTypeName        As Asciiz * 128
Local szRcName          As Asciiz * 128
Local szSourceFile      As Asciiz * %MAX_PATH

Local pResData          As Byte Ptr
Local pAZ               As Asciiz Ptr

Local St                As String
Local sResourceName     As String
Local sResourceType     As String

GetModuleFileName ByVal %NULL, szSourceFile, SizeOf(szSourceFile)
'get resource type "JPEG", number rcNumber (1050 in my resource)
szTypeName           = "JPEG"
dwResourceType       = IIf(%NULL,%NULL, VarPtr(szTypeName))
dwResourceName       = IIf(RcNumber ,RcNumber , VarPtr(szRcName))
' constants for LoadLibraryEx
LoadLibExhFile      = %NULL                         ' SDK says make this null. I obey.
LoadLibExFlags      = %LOAD_LIBRARY_AS_DATAFILE     ' Eliminates the need to resolve any externals (imports) used by target file.
ErrFlag             = %TRUE                         ' default to fail, set success only on, well, success!

hSource = LoadLibraryEx (szSourceFile, LoadLibExhFile, LoadLibExFlags)
' NOTE: LoadLibraryEx with %LOAD_LIBRARY_AS_DATAFILE will fail on Win9x/ME
' if the subject file does not contain any resources.
' both lResourceType and lResourceName may be either an integer or
' a pointer to a null-terminated string based on return of IS_INTRESOURCE.
If hSource Then
    If dwResourceType < &h010000 Then
         lResourceType   = dwResourceType
    Else
        pAZ              = DwResourceType
        sResourceType    = @pAZ
        lResourceType    = StrPtr(sresourceType)
    End If

    If dwResourceName < &h010000 Then
       lResourceName   = dwResourceName
    Else
       pAZ             = DwResourceName
       sResourceName   = @pAZ
       lResourceName   = StrPtr(sResourceName)
    End If
        ' Look for the requested resource in the target file..
    hResFind = FindResource(hSource, ByVal lResourceName, ByVal lResourceType)
    If hResFind Then ' we found it!
       hResLoad        = LoadResource (hSource, hResFind)   ' load it...
       If hResLoad     = %NULL Then Exit Function
       ' Get a pointer to the resource data, and get its size:
       ResSize      =  SizeOfResource (hSource, hResFind)  ' requires the "find" handle
       pResData     =  LockResource   (hResLoad)           ' requires the "load" handle
       ' put the resource data into a dynamic string and set success code.
       If pResData  <> %NULL And ResSize <> %NULL Then
           St       =  Peek$(pResData, ResSize)
           ErrFlag  =  %FALSE   '  SUCCESS!!!
     '  ELSE    ' could not lock resource. Should never happen
       End If
    'ELSE                 ' Requested resource not found in the specified target file
    End If
End If
' clean up. It is not necessary to unlock the resource as per SDK
If hSource Then FreeLibrary hSource
If IsTrue ErrFlag Then Function = "" Else Function = St
End Function
'==========================================================================================
'==========================================================================================