That was the first thing I tried, it behaves the same with either compiler encoding.
Ok, here it is, it's a little larger due to the a$ being left in there. You can try it with both now, LOL!!
Code: Select all
XIncludeFile "F:\PURE BASIC\Includes\RTF Streamer.pbi"
a$ = "{\rtf1\ansi\ansicpg1252\deff0\deflang2057{\fonttbl{\f0\fswiss\fcharset0 Arial;}}" 
a$+"{\*\generator Msftedit 5.41.15.1503;}\viewkind4\uc1\pard\f0\fs20{\pict\wmetafile8\picwgoal903\pichgoal825 " 
a$+"010009000003e402000008000601000000000400000003010800050000000b0200000000050000" 
a$+"000c025e017d01040000002e0118001c000000fb021000070000000000bc020000000001020222" 
a$+"53797374656d00017d010000f7a9724500ea120004ee8339706e22000c020000040000002d0100" 
a$+"0004000000020101001c000000fb029cff0000000000009001000000000440001254696d657320" 
a$+"4e657720526f6d616e0000000000000000000000000000000000040000002d0101000500000009" 
a$+"02000000020d000000320a5700fdff01000400fdfffdff7a015b0120d92d00030000001e000700" 
a$+"0000fc020000ff0000000000040000002d010200040000000601010008000000fa020500000000" 
a$+"00ffffff00040000002d0103000601000024038100bb000300b1000300a80004009f0005009600" 
a$+"06008d00080084000a007b000d00730010006b001300630017005b001b00540020004c00240045" 
a$+"0029003f002f003800340032003a002c0040002700470022004d001d00540019005b0015006200" 
a$+"11006a000e0072000b0079000800810006008a000500920003009a000300a3000200ac000300b4" 
a$+"000300bd000500c5000600ce000800d6000b00de000e00e6001100ed001500f5001900fc001d00" 
a$+"030122000a01270011012c00170132001d01380023013f00280145002e014c003301540037015b" 
a$+"003c01630040016b004401730047017b004a0184004d018d004f01960051019f005201a8005301" 
a$+"b1005401bb005401c4005401ce005301d7005201e0005101e9004f01f2004d01fa004a01030147" 
a$+"010b014401130140011a013c01220137012901330130012e01370128013d01230143011d014901" 
a$+"17014f01110154010a01580103015d01fc006101f5006501ed006801e6006b01de006d01d6006f" 
a$+"01ce007101c5007201bd007301b4007301ac007301a30072019a00710192006f018a006d018100" 
a$+"6b0179006801720065016a00610162005d015b005801540054014d004f0147004901400043013a" 
a$+"003d01340037012f003001290029012400220120001a011b00130117000b01130003011000fa00" 
a$+"0d00f2000a00e9000800e0000600d7000500ce000400c4000300bb00030008000000fa02000000" 
a$+"00000000000000040000002d010400040000000601010007000000fc020000ffffff0000000400" 
a$+"00002d01050008000000fa0200000600000000000000040000002d01060007000000fc02010000" 
a$+"0000000000040000002d0107000601000025038100bb000300b1000300a80004009f0005009600" 
a$+"06008d00080084000a007b000d00730010006b001300630017005b001b00540020004c00240045" 
a$+"0029003f002f003800340032003a002c0040002700470022004d001d00540019005b0015006200" 
a$+"11006a000e0072000b0079000800810006008a000500920003009a000300a3000200ac000300b4" 
a$+"000300bd000500c5000600ce000800d6000b00de000e00e6001100ed001500f5001900fc001d00" 
a$+"030122000a01270011012c00170132001d01380023013f00280145002e014c003301540037015b" 
a$+"003c01630040016b004401730047017b004a0184004d018d004f01960051019f005201a8005301" 
a$+"b1005401bb005401c4005401ce005301d7005201e0005101e9004f01f2004d01fa004a01030147" 
a$+"010b014401130140011a013c01220137012901330130012e01370128013d01230143011d014901" 
a$+"17014f01110154010a01580103015d01fc006101f5006501ed006801e6006b01de006d01d6006f" 
a$+"01ce007101c5007201bd007301b4007301ac007301a30072019a00710192006f018a006d018100" 
a$+"6b0179006801720065016a00610162005d015b005801540054014d004f0147004901400043013a" 
a$+"003d01340037012f003001290029012400220120001a011b00130117000b01130003011000fa00" 
a$+"0d00f2000a00e9000800e0000600d7000500ce000400c4000300bb000300040000002d01040004" 
a$+"0000002d01050004000000f0010600040000002701ffff040000002d010000030000000000" 
a$+"}\par" 
a$+"}" 
Procedure.s BMP2RTF(hBmap) 
  Protected rtf$, bitmap.BITMAP, screenDC, hdcMF, hMF, hdc 
  Protected oldImage, widthTwips, heightTwips, numBytes, mem, *bytes.BYTE, *string.WORD, i, low, high 
  If GetObject_(hBmap, SizeOf(BITMAP), bitmap) 
    If bitmap\bmWidth And bitmap\bmHeight 
      screenDC = GetDC_(0) 
      ;Create an EMF to hold the bitmap. 
        hdcMF = CreateMetaFile_(0) 
      If hdcMF 
        SetMapMode_(hdcMF, #MM_ANISOTROPIC) 
        SetWindowOrgEx_(hdcMF, 0, 0, 0) 
        SetWindowExtEx_(hdcMF, bitmap\bmWidth, bitmap\bmHeight, 0) 
        hdc = CreateCompatibleDC_(screenDC) 
        If hdc 
          oldImage = SelectObject_(hdc, hBmap) 
          BitBlt_(hdcMF, 0, 0, bitmap\bmWidth, bitmap\bmHeight, hdc, 0, 0, #SRCCOPY) 
          SelectObject_(hdc, oldImage) 
          DeleteDC_(hdc) 
          hMF = CloseMetaFile_(hdcMF) 
          If hMF 
            ;Before creating the RTF header we need to calculate the image width/height in twips. 
              widthTwips = MulDiv_(bitmap\bmWidth,1440,GetDeviceCaps_(screenDC, #LOGPIXELSX)) 
              heightTwips = MulDiv_(bitmap\bmHeight,1440,GetDeviceCaps_(screenDC, #LOGPIXELSY)) 
            ;Now the rtf header. 
              rtf$ = "{\rtf1{\pict\wmetafile8\picw" + Str(bitmap\bmWidth) + "\pich" + Str(bitmap\bmHeight) + "\picwgoal" + Str(widthTwips) + "\pichgoal" + Str(heightTwips) + " " 
            ;Add the MF bits as double-character hex. 
            ;First retrieve the MF bits. 
              numBytes = GetMetaFileBitsEx_(hMF, 0, 0) 
            mem = AllocateMemory(numBytes*3) 
            If mem 
              If GetMetaFileBitsEx_(hMF, numBytes, mem) = numBytes 
                *bytes=mem : *string = mem + numBytes 
                For i = 0 To numBytes-1 
                  low = (*bytes\b)&$f + '0': high = (*bytes\b)>>4&$f + '0' 
                  If low > '9' 
                    low + 7 
                  EndIf 
                  If high > '9' 
                    high + 7 
                  EndIf 
                  *string\w = low<<8 + high 
                  *string + 2 
                  *bytes + 1 
                Next 
                rtf$ + PeekS(mem + numBytes, numBytes<<1, #PB_Ascii) + "}}" 
              Else 
                rtf$ = "" 
              EndIf 
              FreeMemory(mem) 
            Else 
              rtf$ = "" 
            EndIf 
            DeleteMetaFile_(hMF) 
          EndIf      
        Else 
          hMF = CloseEnhMetaFile_(hdcMF) 
          DeleteEnhMetaFile_(hMF) 
        EndIf 
      EndIf 
      ReleaseDC_(0, screenDC) 
    EndIf 
  EndIf 
  ProcedureReturn rtf$ 
EndProcedure 
; Procedure Editor_Select(Gadget, LineStart.l, CharStart.l, LineEnd.l, CharEnd.l)    
;   sel.CHARRANGE 
;   sel\cpMin = SendMessage_(GadgetID(Gadget), #EM_LINEINDEX, LineStart, 0) + CharStart - 1 
;   
;   If LineEnd = -1 
;     LineEnd = SendMessage_(GadgetID(Gadget), #EM_GETLINECOUNT, 0, 0)-1 
;   EndIf 
;   sel\cpMax = SendMessage_(GadgetID(Gadget), #EM_LINEINDEX, LineEnd, 0) 
;   
;   If CharEnd = -1 
;     sel\cpMax + SendMessage_(GadgetID(Gadget), #EM_LINELENGTH, sel\cpMax, 0) 
;   Else 
;     sel\cpMax + CharEnd - 1 
;   EndIf 
;   SendMessage_(GadgetID(Gadget), #EM_EXSETSEL, 0, @sel) 
; EndProcedure 
; Procedure InsertEditorText(gadget,Text$) 
;   ProcedureReturn SendMessage_(GadgetID(gadget),#EM_REPLACESEL,0,Text$) 
; EndProcedure 
UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTIFFImageDecoder()
UseTGAImageDecoder()
If OpenWindow(0, 216, 0, 494, 371, "Image to RTF",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
    If CreateGadgetList(WindowID(0))
      TextGadget(2, 5, 15, 60, 20, "Filepath")
      StringGadget(1, 50, 10, 420, 20, "", #PB_String_ReadOnly)
      ButtonGadget(3, 470, 10, 20, 20, "...")
      Frame3DGadget(10,420,35,70,80,"Preview")
      ImageGadget(4, 425, 50, 60, 60, 0)
      EditorGadget(5, 5, 35, 410, 330);,#PB_Editor_ReadOnly)
      SendMessage_(GadgetID(5), #EM_SETTARGETDEVICE, #Null, 0)
      ButtonGadget(6, 420, 340, 70, 25, "Close")
      ButtonGadget(7, 420, 135, 70, 25, "Generate")
      ButtonGadget(8, 420, 165, 70, 25, "Copy")
      Frame3DGadget(11,420,195,70,80,"RichText")
      EditorGadget(12,425,210,60,60)
      DisableGadget(7,1)
      DisableGadget(8,1)
      Richedit_setinterface(GadgetID(12))
  EndIf
EndIf
Repeat
event=WindowEvent()
Select event
  Case #PB_Event_Gadget
    Select EventGadget()
      Case 6 ;close
        event=#PB_Event_CloseWindow
      Case 3 ;browse
        ld.s=OpenFileRequester("Open Image File","D:\","ImageFiles (All)|*.ico;*.bmp;*.png;*.jpg;*.jpeg;*.wmf",0)
        ;ld="D:\All Commander Icons\Smiley PNG\beer.png"
        SetGadgetText(1,ld)
        DisableGadget(7,1)
        If LoadImage(1,GetGadgetText(1))
          If IsImage(1)  
            CopyImage(1,2)
            ResizeImage(2,60,60)
            SetGadgetState(4,ImageID(2))
            DisableGadget(7,0)
          EndIf
        EndIf
      Case 7 ;Generate
        r.s=""
        SetGadgetText(5,"")
          If IsImage(1)
            r=bmp2rtf(ImageID(1))
            If r<>""
              SetGadgetText(5,r)
              ;c.l=CatchRTF(12,@a$, @a$ + Len(a$), #SF_RTF, #SFF_SELECTION)
              c.l=CatchRTF(12,@r, @r + Len(r), #SF_RTF, #SFF_SELECTION)
            EndIf
        EndIf
        DisableGadget(8,r<>"")
      Case 8 ;copy
    EndSelect
EndSelect
Until event=#PB_Event_CloseWindow