Написать рессурс в коде - VBA

Узнай цену своей работы

Формулировка задачи:

Мне нужно запихать картинку в код. Тобишь должна быть строка, в ней HEX данные картинки, а при записи этой строки в файл получалась бы эта картинка. Вот наброски кода:
Проблема этого кода в том что поле в HexToString("") не бесконечно. В нем ограничение на определенную длинну. А мне нужно помещать данные порядка мегабайта в код.

Решение задачи: «Написать рессурс в коде»

textual
Листинг программы
Sub main()
 
    HomeDir$ = ThisWorkbook.Path
    fo$ = HomeDir$ + "\cat.jpg"  '::: имя созд. картинки
    Save_Pic Sheets(3), fo$, 1
    MsgBox "Картинка создана!"
 
End Sub
Sub test()
 
    HomeDir$ = ThisWorkbook.Path
    fi$ = HomeDir$ + "\cat-117.jpg"  '::: имя исх картинки
    r& = Load_pic(Sheets(3), fi$, 1)
    
    fo$ = HomeDir$ + "\cat.jpg"        '::: имя созд. картинки
    Save_Pic Sheets(3), fo$, 1
    
End Sub
 
Sub Save_Pic(Sh As Worksheet, fname As String, rbeg As Long)
    Lf& = Sh.Cells(rbeg, 1).Value
    Buf$ = Space$(Lf&)
    pp& = 1
    cc& = 2
    rr& = rbeg&
    Do
    
       Tmp$ = Trim$(Sh.Cells(rr&, cc&).Value)
       If Len(Tmp$) = 0 Then Exit Do
       V& = Val(Tmp$)
       kb& = IIf(Lf& - pp& > 3, 3, Lf& - pp&)
       If kb& = 0 Then Exit Do
       jj& = pp& + 2
       For i& = 1 To kb&
           a$ = Chr$(V& Mod 256)
           V& = V& \ 256
           Mid$(Buf$, jj&, 1) = a$
           jj& = jj& - 1
       Next i&
       pp& = pp& + 3
       If kb& < 3 Then Exit Do
       cc& = cc& + 1
       If cc& > 256 Then
          cc& = 1
          rr& = rr& + 1
       End If
    Loop
    For i& = 1 To kb&
        a$ = Chr$(V& Mod 256)
        V& = V& \ 256
        Mid$(Buf$, jj&, 1) = a$
        jj& = jj& - 1
    Next i&
    fo% = FreeFile
    Open fname For Binary Access Write As #fo%
    Put #fo%, , Buf$
    Close #fo%
End Sub
 
Function Load_pic(Sh As Worksheet, fname As String, rbeg As Long) As Long
    fi% = FreeFile
    Open fname For Binary Access Read As #fi%
    Lf& = LOF(fi%)
    Buf$ = Space$(Lf&)
    Get #fi%, , Buf$
    Close #fi%
    rr& = rbeg
    cc& = 1
    Sh.Cells(rr&, cc&).Value = Lf&
    cc& = 2
    V& = 0
    k% = 0
    For ii& = 1 To Lf&
        a& = Asc(Mid$(Buf$, ii&, 1))
        V& = V& * 256 + a&
        k% = k% + 1
        If k% = 3 Then
           Sh.Cells(rr&, cc&).Value = V&
           k% = 0
           V& = 0
           cc& = cc& + 1
           If cc& > 256 Then
              rr& = rr& + 1
              cc& = 1
           End If
        End If
    Next ii&
    If k% > 0 Then
       Sh.Cells(rr&, cc&).Value = V&
       cc& = cc& + 1
       If cc& > 256 Then rr& = rr& + 1
    End If
    Load_pic = rr&
End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5