purebasic.info

PureBasic forum
Текущее время: Ср июл 24, 2019 8:18 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 63 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: Как в DLL засунуть картинки PNG
СообщениеДобавлено: Пн апр 29, 2019 12:36 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6525
Благодарил (а): 28 раз.
Поблагодарили: 220 раз.
Пункты репутации: 57
Пётр писал(а):
kvitaliy писал(а):
RES файл думаю все могут создавать
Его PB может создать из rc файла.

А сам rc на 80 картинок? Если есть такая прога, то в принципе разницы нет.
Мне RES удобен в том, что выделил все картинки в папке, и автоматом создал RES без ошибок.

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как в DLL засунуть картинки PNG
СообщениеДобавлено: Пн апр 29, 2019 12:45 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11491
Благодарил (а): 4 раз.
Поблагодарили: 468 раз.
kvitaliy писал(а):
А сам rc на 80 картинок?
Сколько добавите столько и будет. Посмотрите файл в архиве viewtopic.php?p=92035#p92035

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как в DLL засунуть картинки PNG
СообщениеДобавлено: Пн апр 29, 2019 12:58 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6525
Благодарил (а): 28 раз.
Поблагодарили: 220 раз.
Пункты репутации: 57
Пётр писал(а):
kvitaliy писал(а):
А сам rc на 80 картинок?
Сколько добавите столько и будет. Посмотрите файл в архиве viewtopic.php?p=92035#p92035

Не понял, как автоматически из папки в компьютере добавить файлы в rc при помощи Пурика?
Код:
1
2
3
4
5
6
7
8
9
10
11
12
#define LANG_NEUTRAL 0
#define SUBLANG_NEUTRAL 0
 
// TOOLBAR.RC
#define PUBLISHERS_TOOLBAR_PNG 1001
#define SHUTDOWN_TOOLBAR_PNG 1002
#define TASKS_TOOLBAR_PNG 1003
 
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
PUBLISHERS_TOOLBAR_PNG RCDATA "publishers.bmp"
SHUTDOWN_TOOLBAR_PNG RCDATA "shutdown.png"
TASKS_TOOLBAR_PNG RCDATA "tasks.png"


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как в DLL засунуть картинки PNG
СообщениеДобавлено: Пн апр 29, 2019 1:03 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11491
Благодарил (а): 4 раз.
Поблагодарили: 468 раз.
Меню Компилятор --> Настройки компилятора. Вкладка Ресурсы.
Следует указать путь к rc файлу.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как в DLL засунуть картинки PNG
СообщениеДобавлено: Пн апр 29, 2019 1:51 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 862
Благодарил (а): 2 раз.
Поблагодарили: 41 раз.
Пункты репутации: 9
Пётр писал(а):
newJS писал(а):
эта строка возвращает некий номер, но картинки нет
Это все равно что написать.
Код:
1
2
3
4
Procedure clubs()
EndProcedure
 
n=ImageGadget(11, 9, 9, 0, 0, @clubs())

В теме есть несколько примеров. Почему бы не посмотреть как они устроены?

Сергейчик писал(а):
Не нравится что то мне с длл,так как при её открытии всё содержимое грузится в память.
Для этого картинки должны быть в ресурсах, которые не загружаются вместе с исполняемым файлом.

Сергейчик писал(а):
загрузку ресурсов(правда размер зоголовков не считал а тупо на 100 байт сместил от него на начало ресурса)
В примере нет работы с ресурсами. Посмотри этот код viewtopic.php?p=92035#p92035


Объём данных каждой картинки в данном случае ресурс и не важно в dll они как у вас или в файле.
только вот длл при открытии LoadLibrary() всем своим объёмом данных грузится в память (до её закрытия)а после вы перекопируете по одной картинке ,у меня же грузится в память отдельно по одной картинки для перекопирования.
и если будет 10000 картинок условно говоря а вам нужна только одна из них,то вы кучу памяти по напрасну сожрёте открывая длл. :roll:


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как в DLL засунуть картинки PNG
СообщениеДобавлено: Пн апр 29, 2019 1:56 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6525
Благодарил (а): 28 раз.
Поблагодарили: 220 раз.
Пункты репутации: 57
Пётр писал(а):
Меню Компилятор --> Настройки компилятора. Вкладка Ресурсы.
Следует указать путь к rc файлу.

Это понятно. Я спрашиваю как автоматически сделать сам файл rc?

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как в DLL засунуть картинки PNG
СообщениеДобавлено: Пн апр 29, 2019 2:06 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11491
Благодарил (а): 4 раз.
Поблагодарили: 468 раз.
kvitaliy писал(а):
Я спрашиваю как автоматически сделать сам файл rc?
Этот файл код для porc.exe и porc.dll. А как автоматически написать код? :wink: :D
Используя rc файл можно задать секцию куда поместить данные, а также их идентификаторы. Это могут быть не только картинки, но и любые другие данные (шрифты, курсоры, диалоговые окна, аудио, видео, бинарные данные и т. д.) Сможете все это в один клик поместить в res файл и при этом чтобы данные попали в нужные разделы ресурсов и имели заданные идентификаторы?

Сергейчик писал(а):
Объём данных каждой картинки в данном случае ресурс и не важно в dll они как у вас или в файле.только вот длл при открытии LoadLibrary() всем своим объёмом данных грузится в память
Исполняемый файл PE формата поделен на секции. Необязательно их все загружать. Ресурсы (секция .rsrc) не загружаются при открытии dll с помощью LoadLibrary().

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как в DLL засунуть картинки PNG
СообщениеДобавлено: Пн апр 29, 2019 2:29 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6525
Благодарил (а): 28 раз.
Поблагодарили: 220 раз.
Пункты репутации: 57
В том то и дело, что res можно создать автоматически.

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как в DLL засунуть картинки PNG
СообщениеДобавлено: Пн апр 29, 2019 2:29 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 862
Благодарил (а): 2 раз.
Поблагодарили: 41 раз.
Пункты репутации: 9
Пётр писал(а):
Исполняемый файл PE формата поделен на секции. Необязательно их все загружать. Ресурсы (секция .rsrc) не загружаются при открытии dll с помощью LoadLibrary().

Так вы же качаете с индификатора открытой либы,и что она сама подгружает из своего файла длл что на диске ресурсы в секцию,или всё же она целиком загружена в память совсеми своими секциями? :roll:


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как в DLL засунуть картинки PNG
СообщениеДобавлено: Пн апр 29, 2019 2:55 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11491
Благодарил (а): 4 раз.
Поблагодарили: 468 раз.
Доступ к ресурсам осуществляется через WinAPI. Винда из ресурсов загружает только запрошенные данные.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как в DLL засунуть картинки PNG
СообщениеДобавлено: Вт апр 30, 2019 6:16 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 849
Благодарил (а): 87 раз.
Поблагодарили: 24 раз.
Пункты репутации: 5
Пётр, то что я напортачил, оно понятно, вот только пока непонятно когда руки дойдут посмотреть, вчера даже не пробовал

Виталик, я один раз сделал rc файл прогой, у меня этих прог больше десятка и не одна не умеет добавлять пакетом, только поштучно
так я потом по образцу этого файла генерил своё, это же простой текстовый файл

всем спасибо, руки дойдут буду разбираться


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как в DLL засунуть картинки PNG
СообщениеДобавлено: Вт апр 30, 2019 4:17 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 862
Благодарил (а): 2 раз.
Поблагодарили: 41 раз.
Пункты репутации: 9
Пётр писал(а):
Доступ к ресурсам осуществляется через WinAPI. Винда из ресурсов загружает только запрошенные данные.

С делайте длл с 200-500(ну копии одной) картинок посмотреть.
Переделал загрузчик в файл,3000 иконок 260метров мгновенно залетели
а вот загружает из него не понятно медлено.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
DataSection
  IconStart:
 IncludeBinary "C:\new\Kredit.ico"
  IconEnd:
 
  BitmapStart:
 IncludeBinary "C:\new\Kredit1.ico"
  BitmapEnd:
 
  PngStart:
 IncludeBinary "C:\new\Lizing.ico"
  PngEnd:
EndDataSection
 
OpenFile(0,"C:\new\resursy.ini")
 
 
 
Procedure Saveresursy(resurs_start.i,resurs_End.i)
 
 Static nomerresursa.l=-1
  nomerresursa+1
 
 
 Static nahalo_sledushegoresursa.l
 
 Protected dlinastroki.i
       resurs_End-resurs_start;получаем размер в resurs_End
           
 
 
     
        dlinastroki =Len(Str(nomerresursa))+Len(Str(nahalo_sledushegoresursa))+Len(Str(resurs_End))+21
       
        FileSeek(0,nahalo_sledushegoresursa, #PB_Absolute)
        nahalo_sledushegoresursa+dlinastroki
       
        WriteString(0,"["+Str(nomerresursa)+"]"+#CRLF$+"nahalo="+Str(nahalo_sledushegoresursa)+#CRLF$+"Size="+Str(resurs_End)+#CRLF$,#PB_Ascii)
       
       
        FileSeek(0,nahalo_sledushegoresursa, #PB_Absolute)
        WriteData(0,resurs_start,resurs_End)
       
        nahalo_sledushegoresursa+resurs_End+1
        FileSeek(0,nahalo_sledushegoresursa, #PB_Absolute)
        WriteString(0,#CRLF$,#PB_Ascii)
        nahalo_sledushegoresursa+2
       
     
           
EndProcedure    
 
 For i=0 To 1000
      Saveresursy(?IconStart,?IconEnd)
      Saveresursy(?BitmapStart,?BitmapEnd)
      Saveresursy(?PngStart,?PngEnd)  
  Next
 
  CloseFile(0)
 


вот проба загрузки из файла
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
 
Procedure Openresursy(failresursa$)
;можно сделатьгрупповую загрузку
EndProcedure
 
Procedure.i Openresurs(failresursa$,nomerresursa.i)
  Protected *mem
  Protected nahalo_resursa.l
  Protected razmer.l
  Protected result.i
  OpenPreferences(failresursa$)
   PreferenceGroup(Str(nomerresursa))
   nahalo_resursa=ReadPreferenceLong("Nahalo", 200)
   razmer=ReadPreferenceLong("Size", 200)
  ClosePreferences()
   
  OpenFile(0,failresursa$)
 *mem=AllocateMemory(razmer)
    FileSeek(0,nahalo_resursa,#PB_Absolute)
   ReadData(0,*mem,razmer)
   result= CatchImage(#PB_Any, *mem,razmer)
   
   FreeMemory(*mem)
   CloseFile(0)
   ProcedureReturn result
EndProcedure
     
     
       
UsePNGImageDecoder()  
;For i=1 To 20
      ; Openresurs("C:\new\resursy.ini",i)
;Next
 
  ;ShowLibraryViewer("Image", 0)
  ;CallDebugger
OpenWindow(0, 0, 0, 500, 500, "zagruzka", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(300, 340, 380, 60, 40, "zagruzka")
For i=0 To 10
ImageGadget(i, i*30,i*30, 32, 32, ImageID(Openresurs("C:\new\resursy.ini",i)))
Next
Repeat
      Select WaitWindowEvent()
 
        Case #PB_Event_CloseWindow
          Break
       Case #PB_Event_Gadget;если событие кнопок
         Select EventGadget()  
           Case 300
             
             For i=0 To 10
               ImageGadget(i+11,80+i*30,i*30, 32, 32, ImageID(Openresurs("C:\new\resursy.ini",i)))
             Next
             
         EndSelect      
      EndSelect    
  ForEver
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как в DLL засунуть картинки PNG
СообщениеДобавлено: Вт апр 30, 2019 8:17 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Сб мар 28, 2015 11:06 pm
Сообщений: 176
Откуда: Україна
Благодарил (а): 12 раз.
Поблагодарили: 16 раз.
Пункты репутации: 9
1. упаковать картинки в zip-архив (можно без сжатия)
2. переименовать архив в *.dll
3. PROFIT! :roll:


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как в DLL засунуть картинки PNG
СообщениеДобавлено: Вт апр 30, 2019 9:49 pm 
Не в сети
студент

Зарегистрирован: Сб апр 20, 2019 7:48 pm
Сообщений: 9
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
кстати хорошая идея с архивом, но это навело меня на другую мысль, на основе самораспаковывающихся архивов, где данные записываются в файл после компиляции в конец
сама идея, можно без архива даже
написать функцию которая считывает данные из файла после исполняемого кода, например принимает цифру (номер картинки) а возвращает саму картинку по этой цифре и упаковать это в длл, по сути можно избежать привязки к языку и данные не будут грузиться в память (хотя с современными объемами памяти не вижу проблемы загрузки в память)
функцию можно устроить как просто чтение по смещению или организовать это цивильно
тут останется написать программу которая допишет данные, имхо самым сложным будет чтение из конца запущенного файла
а в главной программе подключить длл и вызывать функцию с цифрами и использовать картинки


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как в DLL засунуть картинки PNG
СообщениеДобавлено: Вт апр 30, 2019 10:14 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11491
Благодарил (а): 4 раз.
Поблагодарили: 468 раз.
loginmen писал(а):
на основе самораспаковывающихся архивов
http://pure-basic.narod.ru/article/sfx/sfx_zip.html
Скомпилировать не как exe, а как dll.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 63 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB