purebasic.info

PureBasic forum
Текущее время: Пн май 20, 2019 3:50 am

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




Начать новую тему Ответить на тему  [ Сообщений: 61 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: Как в DLL засунуть картинки PNG
СообщениеДобавлено: Ср май 01, 2019 12:02 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 827
Благодарил (а): 2 раз.
Поблагодарили: 38 раз.
Пункты репутации: 9
Новую замутку для скорости сделал. :roll:
Код:
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
62
63
64
 
;создание файла ресурсов
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\resursy2.ini")
 
 
 
Procedure Saveresursy(resurs_start.i,resurs_End.i)
 
 Static nomerresursa.l=-1
  nomerresursa+1
 
 
 Static nahalo_sledushegoresursa.l
 
       resurs_End-resurs_start;получаем размер в resurs_End
           
 
        FileSeek(0,nahalo_sledushegoresursa, #PB_Absolute)
        nahalo_sledushegoresursa+13
               
        WriteString(0,"[",#PB_Ascii)
        WriteLong(0,nomerresursa)
        WriteString(0,"]",#PB_Ascii)
        ;
        WriteLong(0,resurs_End);размер
        WriteString(0,#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 100
      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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
 
Procedure Openresursy(failresursa$)
;можно сделатьгрупповую загрузку
EndProcedure
 
Global memresursov.i
Global length.l
Procedure.i Loadmem_resyrsy(failresursa$)
 
  OpenFile(0,failresursa$)
  length = Lof(0)
 memresursov=AllocateMemory(length)
   
 ReadData(0,memresursov,length)
 CloseFile(0)
 
 
EndProcedure
Procedure.i Freemem_resyrsy()
FreeMemory(memresursov)
EndProcedure
Procedure.i Openresurs(nomerresursa.i)
 
  Protected nahalo_resursa.l
  Protected razmer.l
 
 
 
 
 
 ;!push esi
 ;!push ecx
 !mov dword esi,[v_memresursov]
 !mov dword eax,[p.v_nomerresursa]
 !xor ecx,ecx
 !cikl:
!cmp byte [esi],"["
 !jnz idemdalhe
 !cmp byte [esi+5],"]"
 !jnz idemdalhe
  !cmp dword [esi+1],eax
  !jnz idemdalhe
 
  !mov dword eax,[esi+6]
  !mov dword [p.v_razmer],eax
  ;
  !add dword esi,13
  !mov dword [p.v_nahalo_resursa],esi
 !jmp vyiti
 
 !idemdalhe:
!add dword esi,1
 !add dword ecx,1
 !cmp dword ecx,[v_length]
 !jnz cikl
 !vyiti:
;!pop ecx
 ;!pop esi
 
 
   
   ProcedureReturn CatchImage(#PB_Any, nahalo_resursa,razmer)
EndProcedure      
     Loadmem_resyrsy("C:\new\resursy2.ini")
       
;UsePNGImageDecoder()
;For i=1 To 20
      ; Openresurs(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")
ButtonImageGadget(301, 340, 440, 60, 40, ImageID(Openresurs(0)))
 
For i=0 To 10
ImageGadget(i, i*30,i*30, 32, 32, ImageID(Openresurs(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(i)))
             Next
             
         EndSelect      
      EndSelect    
  ForEver      
         
  Freemem_resyrsy()        
         
         
 



Вложения:
Комментарий к файлу: Смотрим картинки в файле
wiewerfaila.zip [1000.91 KiB]
Скачиваний: 6
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как в DLL засунуть картинки PNG
СообщениеДобавлено: Сб май 04, 2019 8:10 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 465
Благодарил (а): 33 раз.
Поблагодарили: 52 раз.
Пункты репутации: 0
Вы меня толкнули на идею, не хранить ли строки для перевода в ресурсах стринг


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

Зарегистрирован: Сб мар 28, 2015 11:06 pm
Сообщений: 175
Откуда: Україна
Благодарил (а): 12 раз.
Поблагодарили: 16 раз.
Пункты репутации: 9
AZJIO писал(а):
Вы меня толкнули на идею, не хранить ли строки для перевода в ресурсах стринг

угу, вот так строки добавляются, а как извлекать пока не было времени разбираться..
+ в *.rc-файл
Код:
1
2
3
4
5
6
7
STRINGTABLE 
BEGIN
    1            "String 1"
    2            "String 2"
    3            "String 3"
    4            "String 4"
END



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

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 827
Благодарил (а): 2 раз.
Поблагодарили: 38 раз.
Пункты репутации: 9
AZJIO писал(а):
Вы меня толкнули на идею, не хранить ли строки для перевода в ресурсах стринг

Главное взяться за неё и не бросить. :D


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

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 809
Благодарил (а): 81 раз.
Поблагодарили: 23 раз.
Пункты репутации: 5
AZJIO писал(а):
Вы меня толкнули на идею, не хранить ли строки для перевода в ресурсах стринг

ты имеешь ввиду ини-файл?

----
вообще то я хотел сделать стандартную длл, но с пнг картинками, а не ико, так чтобы параметром функции отправить имя картинки и получить саму картинку, не голую длл с иконками, а так чтобы фукция картинку возвращала
а вы всяких придумак напридумывали, одно радует, всё это кто то да использует


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11461
Благодарил (а): 4 раз.
Поблагодарили: 464 раз.
newJS писал(а):
ты имеешь ввиду ини-файл?
Строки как и другие данные можно хранить в ресурсах исполняемого файла.

newJS писал(а):
вообще то я хотел
newJS писал(а):
а вы всяких придумак напридумывали
Нужно сразу было писать что нужно.

newJS писал(а):
так чтобы фукция картинку возвращала
Что возвращала? Хендл или данные картинки.

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


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

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 827
Благодарил (а): 2 раз.
Поблагодарили: 38 раз.
Пункты репутации: 9
newJS писал(а):
AZJIO писал(а):
Вы меня толкнули на идею, не хранить ли строки для перевода в ресурсах стринг

ты имеешь ввиду ини-файл?

----
вообще то я хотел сделать стандартную длл, но с пнг картинками, а не ико, так чтобы параметром функции отправить имя картинки и получить саму картинку, не голую длл с иконками, а так чтобы фукция картинку возвращала
а вы всяких придумак напридумывали, одно радует, всё это кто то да использует


Какая разница что там будет у меня в файле ико или пнг?(тут алгоритм позволяет).
по поводу этого
Код:
1
2
3
 
n=ImageGadget(11, 9, 9, 0, 0, CallFunction(234, "clubs"))
 


Так скорее работать не будет,потому как мы из памяти грузим через CatchImage(#PB_Any,memresursov+smeshenie,razmer);она обрабатывает там что то перед тем как
вернуть (указатель?)
таким образом вам наверное нужно что то вроде этого
но это типа в секции данных будут картинки
Опять же повторюсь есть пример где большой объём картинок или картинки в секции ресурсов,посмотреть загруженность памяти? :roll:
PS:А браузерные картинки где хранятся(или они в память качаются постоянно)?
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
ProcedureDLL.i Kredit()
ProcedureReturn CatchImage(#PB_Any,?memresursa,?endmemresursa-?memresursa)
EndProcedure
ProcedureDLL.i Lizing()
ProcedureReturn CatchImage(#PB_Any,?memresursa1,endmemresursa1-?memresursa1)
EndProcedure
 
 
DataSection
  memresursa:
 IncludeBinary "C:\new\Kredit.png"
  endmemresursa:
 memresursa1:
 IncludeBinary "C:\new\Lizing.png"
  endmemresursa1:
 
EndDataSection
 



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

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 809
Благодарил (а): 81 раз.
Поблагодарили: 23 раз.
Пункты репутации: 5
всё работает

вот это в длл
Код:
1
2
3
4
5
6
7
8
 
ProcedureDLL.l c2():ProcedureReturn ?c2:EndProcedure
....
DataSection
c2: :IncludeBinary "c2.png"
.....
EndDataSection
 


так получаю картинку
Код:
1
2
3
 
ImageGadget(12, 9, 9, 0, 0, ImageID(CatchImage(any, CallFunction(234, name))))
 



Пётр писал(а):
Строки как и другие данные можно хранить в ресурсах исполняемого файла.

про это и спрашиваю, что он имел ввиду
строки в ресурсах создают проблемы для перевода, а внешний текстовый файл проблем не создаёт
Пётр писал(а):
Что возвращала? Хендл или данные картинки.

а в чём разница? данные картинки, это ты имеешь ввиду двоичные данные?
код накидаешь?


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

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 827
Благодарил (а): 2 раз.
Поблагодарили: 38 раз.
Пункты репутации: 9
В общем вчера я поэксперементировал с dll
Так вот CatchImage() в длл не работает когда нет в длл UsePNGImageDecoder()
а с ним можно делать да и размер наверно будет не лишнем для скорости. :D
PS: длл в 256 метров линкер отказался компилить вот 50 скомпилил.
что интересно когда открыл длл ,память изменилась на 2м. :roll:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
Macro kartinka(adres,razmer)
  ProcedureReturn ImageID(CatchImage(any,adres,razmer));не нужно будет писать в основной проге 100 раз  
EndMacro
 
UsePNGImageDecoder()
 
ProcedureDLL.i c2()
kartinka(?c2, ?endc2-?c2)
EndProcedure
DataSection
c2:
IncludeBinary "c2.png"
endc2:
EndDataSection
 



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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11461
Благодарил (а): 4 раз.
Поблагодарили: 464 раз.
newJS писал(а):
строки в ресурсах создают проблемы для перевода
Любым редактором ресурсов переводятся.
newJS писал(а):
а в чём разница? данные картинки, это ты имеешь ввиду двоичные данные?
Да, под данными подразумевается то что ты написал
Код:
1
2
3
4
5
6
ProcedureDLL c2():ProcedureReturn ?c2:EndProcedure
....
DataSection
c2: :IncludeBinary "c2.png"
.....
EndDataSection

В случае хендла код будет таким.
Код:
1
2
3
4
5
6
ProcedureDLL c2():ProcedureReturn CatchImage(0, ?c2):EndProcedure
....
DataSection
c2: :IncludeBinary "c2.png"
.....
EndDataSection

Если результат функции типа Long код не будет нормально работать при компиляции в x64.

Сергейчик писал(а):
Так вот CatchImage() в длл не работает когда нет в длл UsePNGImageDecoder()
В exe не также?

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


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

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 827
Благодарил (а): 2 раз.
Поблагодарили: 38 раз.
Пункты репутации: 9
Я о том что независимо есть ли в программе,должна быть и в длл.
А вот от ImageID() действительно как промежуточного звена можно и отказаться. :roll:
ps:а почему png,у меня те же картинки в jpeg меньше в 3 раза. 8)


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11461
Благодарил (а): 4 раз.
Поблагодарили: 464 раз.
Сергейчик писал(а):
Я о том что независимо есть ли в программе,должна быть и в длл.
Разве DLL имеет доступ к коду exe программы, т. е. знает где находится в нем функция UsePNGImageDecoder() и может ее вызвать? Если нет, то как будут декодироваться данные?

Сергейчик писал(а):
а почему png,у меня те же картинки в jpeg меньше в 3 раза.
В случае PNG картинка не отличается от оригинала. Из JPEG оригинал получить не получится.

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


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

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 827
Благодарил (а): 2 раз.
Поблагодарили: 38 раз.
Пункты репутации: 9
Пётр писал(а):
Сергейчик писал(а):
Я о том что независимо есть ли в программе,должна быть и в длл.
Разве DLL имеет доступ к коду exe программы, т. е. знает где находится в нем функция UsePNGImageDecoder() и может ее вызвать? Если нет, то как будут декодироваться данные?

Сергейчик писал(а):
а почему png,у меня те же картинки в jpeg меньше в 3 раза.
В случае PNG картинка не отличается от оригинала. Из JPEG оригинал получить не получится.


А зачем он оригнал в программе,на кнопке к примеру или ещё каком выводе?
PS:Он оригинал у сборщика программы :D


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

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 465
Благодарил (а): 33 раз.
Поблагодарили: 52 раз.
Пункты репутации: 0
Сергейчик писал(а):
ps:а почему png,у меня те же картинки в jpeg меньше в 3 раза
А что ты не знаешь, что они кодируются разными способами? Если возьмёшь малоцветный рисунок с прямыми линиями у тебя png будет в разы меньше, особенно если при сохранении укажешь индексированный цвет и применишь сжатие, а если фото пейзажа полноцветный, то jpg будет в разы меньше.


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

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

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


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

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


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

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


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

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