Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/87: Рейтинг темы: голосов - 87, средняя оценка - 4.98
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153

Положить Файл На Сервер

24.01.2013, 20:11. Показов 16684. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Товарищи, добрый день!

Возникла проблема, взываю к помощи.

Есть, значит, лотусная база, предназначенная для работы через броузер. Короче, вебная база.

Есть некий процесс (электронная подпись), который сейчас работает так:
1. открывается форма с Java апплетом
2. апплету в параметрах подаётся URL на файл, который надо подписать (вида http://SERVER/PATH.nsf/0/UNID/$file/FILENAME.gif)
3. после трастинга апплет всё это дело скачивает в TEMP директорию локального компа (попутно с java классами)
4. апплет модифицирует исходный файл

В результате у нас есть файл лежащий в локальной TEMP папке.

Вопрос: как мне этот файл забрать обратно на сервер, приложить к документу и т.д.
У апплета есть параметр, куда cслать POST мессыдж с контетном файла, после того, как он успешно был модифицирован апплетом.
Параметр тоже подаётся в виде URLa

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

Заранее спасибо за идеи!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.01.2013, 20:11
Ответы с готовыми решениями:

Как не положить сервер используя post?
Доброе время суток. Стоит задача: php считывает данные с html формы после проверки на нажатие кнопки То, есть Если...

Положить базу данных на удаленный сервер
У меня есть небольшое учебное приложение с БД. Могу я положить БД на какой-нибудь удаленный сервер, чтобы к базам был доступ у всех...

Положить ресурсы в jar файл
Здрасти. У меня такая проблема: у меня есть куча текстовых файлов и картинок, которые я использую в программе, посколько их замена в...

17
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 1,197
24.01.2013, 20:53
Не понял 2 вещи.
1. В процессе подписания нам нужно получить саму подпись, грубо говоря, хэш некоторых данных. Для чего нам обратно вкладывать файл?
2. Для чего извлекать файл, если его (если это файл) можно из Java получить по url, тут же подписать, и записать подпись куда следует?
0
1 / 1 / 0
Регистрация: 01.10.2006
Сообщений: 615
25.01.2013, 11:03
а приаттачить (аплоад) в какой-нибудь документ через апплет можно ?
0
0 / 0 / 0
Регистрация: 28.05.2005
Сообщений: 347
25.01.2013, 18:58
Может AJAX развернуть и потом агентом?
http://sitear.ru/material/ajax-zagruzka-fa...uery-iframe-php
http://habrahabr.ru/post/50223/
0
0 / 0 / 0
Регистрация: 04.11.2007
Сообщений: 3,019
26.01.2013, 19:28
подумать только, я эту задачу недавно поставил криптопровайдеру

поставь скрытый аплоад, где будет путь к твоему модифицированному файлу
и после нажатия кнопочки "подписать/проверить" всё это дело сабмитится
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
27.01.2013, 11:56
Прошу прощения за молчание на выходных: пароль дома не запомнен в форум, а скидывать пароль не хотелось.
Ну и да: пятница вечер не самое лучшее время для создания темы

VladSh
>В процессе подписания нам нужно получить саму подпись, грубо говоря, хэш некоторых данных.
Тут речь идёт не о лотусном подписывании, а принятой в Латвии электронной подписи.
В результате процесса подписывания, исходный файл вкладывается в файл .edoc (по сути zip) с метаданными, хешем и т.д.
Короче, после подписания получается новый файл, внутри которого лежит наш исходный.

Kee_Keekkenen
>а приаттачить (аплоад) в какой-нибудь документ через апплет можно?
У апплета есть параметр, куда ложить (аплодить) результирующий файл.
Я, конечно, могу подать урл на документ, но апплет не сможет его обработать ибо о специфике LN ничего не знает.
Т.е. если подавать URL, то мне нужно подавать URL на какую-то папку на сервере, куда можно свободно аплодить файлы.
Собственно, как бы часть вопроса и состояла в этом: как в Domino организовать папку, куда можно свободно аплодить файлы.

NetWood
>Может AJAX развернуть и потом агентом?
Посмотрел, что-то похожее.
Поставил в очередь.

ToxaRat
>поставь скрытый аплоад, где будет путь к твоему модифицированному файлу
Вот с этого, я, пожалуй, и попробую начать.
0
0 / 0 / 0
Регистрация: 15.01.2009
Сообщений: 57
27.01.2013, 13:15
Если у апплета есть доступ и к файлу и к сети, а судя по всему он есть. То я бы сделал на домине агента, либо сервлет, которому апплет будет POSTом отправлять файл и некий ключ (UNID?). По этому ключу агент-сервлет понимает где исходный документ и к чему надо аттачить полученный файл.

Примерно так. Вопросами видятся:
1. доступ к файловой системе из апплета (давно это было, вроде были какие-то большие траблы)
2. секьюрность передачи файлов сервер-аплет-сервер (https?)
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
27.01.2013, 13:22
ToxaRat
Слушай, а где указывать этот самый "путь к твоему модифицированному файлу"
Что-то я туплю
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
27.01.2013, 15:08
Leoric
Смотри, как раз в данный момент апплет после выполнения подписи пытается методом POST отослать данные по URL указаному в параметре апплета.
Как мне сделать агента, который мог бы ловить этот пост реквест и распарсить его?

/me чувствует себя тупицей
0
0 / 0 / 0
Регистрация: 14.01.2009
Сообщений: 257
27.01.2013, 16:32
почта на JS
глянь эту ссылку, может натолкнет на что-то, там есть обзор использования агента через JS
0
0 / 0 / 0
Регистрация: 15.01.2009
Сообщений: 57
27.01.2013, 17:29
Вызов агента под веб - OpenAgent
Syntax
http://Host/Database/AgentName?OpenAgent
Examples
http://www.mercury.com/sales/leads.nsf/Pro...Leads?OpenAgent
Note Agents may only be referred to by name. The use of UNID is not supported when referring to an agent.

Посмотрите в хэлпе — Examples: Web agents, там есть как парсить GET запрос. В Table of CGI variable names есть доступные переменные (по идее надо доставать из Request_Content).

В принципе обработка POST будет стандартная для java, здесь поможет кучка статей в гугле.

Примеры кода работы постараюсь показать когда буду дома, если найду в своей свалархиве
0
0 / 0 / 0
Регистрация: 28.05.2005
Сообщений: 347
28.01.2013, 02:00
Цитата Сообщение от Leoric
Посмотрите в хэлпе — Examples: Web agents, там есть как парсить GET запрос. В Table of CGI variable names есть доступные переменные (по идее надо доставать из Request_Content).
Как-то так
http://host/base.nsf/RC?OpenAgent&id=3...4257B0100775E01
Внутри

Code
1
2
3
    Set db = s.CurrentDatabase
Set ctx=s.DocumentContext
ConfirmUserID = Strright(ctx.Query_String(0), "id=")
Ну и в скрытытом аплоаде параметры так и передавать агенту.
0
0 / 0 / 0
Регистрация: 15.01.2009
Сообщений: 57
29.01.2013, 01:13
LotusScript
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
Sub Initialize
 
Этот агент срабатывает из Веба при нажатии кнопки "Заказ" - посылает письмо-заказ
Dim s As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Set doc=s.DocumentContext
Set agentLog = New NotesLog("Agent log")
Call agentLog.OpenAgentLog
 
 
Set db=s.CurrentDatabase
Set memo = New NotesDocument(db)
Dim rt As NotesRichTextItem
Set rt = New NotesRichTextItem( memo, "Body" )
order = doc.Request_Content(0)     содержимое запроса в виде: from=...&subject=...&body=...
 
 
pos = Instr(order,"&")                     извлечение первого параметра from= и
textFrom = Left(order,pos-1)              присваивание его в поле SMTPOriginator:
order = Right(order, Len(order)-pos)  ответ будет отсылаться по этому адресу
posEq = Instr(textFrom, "=")
memo.SMTPOriginator = Right (textFrom , Len(textFrom)-posEq)
 
..... все остальные обработки строки запроса
 
memo.Form = "Document"
отправка письма в базу где оно будет обработано как входящий заказ
Call memo.Send (False, "адрес@базы куда отправляем на обработку")
 
Print |ответ клиенту|
Call agentLog.LogAction("создано и отправлено письмо")
Call agentLog.Close
End Sub
Агент дергается из POST формы на странице заказа в запросе получает введенные данные и формирует письмо-заказ которое отправляет в базу для обработки.
Здесь можно видеть основной принцип, Set doc=s.DocumentContext -> контекст агента (док со спец полями из формы), order = doc.Request_Content(0) -> строка запроса
Сейчас подумал, задачи принимать файлы никогда не стояло, всё как-то параметры, а файла всё как-то на отдачу. Но думаю принцип тотже.

P.S. Не пинайте за такую крывущую обработку, это было в первые пол года работы)) Но оно еще живо, а значит имеет право на существование)
P.P.S. На Java не нашел реализации, кануло в лету при переезде по ходу
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
29.01.2013, 13:00
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"класс:"</div></div><div class="sp-body"><div class="sp-content">

LotusScript
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
encode возвращает вместо " " -> "+"
http://docs.oracle.com/javase/1.4.2/docs/api/java/net/URLEncoder.html
Class HttpBase As ErrorHandlerWJ
Private curdoc As NotesDocument
Private ses As NotesSession
Private isPrintedHeader As Boolean
Private isPrintedEnd As Boolean
Private decoderClass As JavaClass
Private encoderClass As JavaClass
Private encoderObj As JavaObject
Private Contenttype As String
Private msgList List As String
Private msgCount As Long
Private errList List As String
Private errCount As Long
Sub New()
Set ses=New NotesSession
Set curdoc=ses.DocumentContext
Set encoderClass=jSession.Getclass({java/net/URLEncoder})
Set decoderClass=jSession.Getclass({java/net/URLDecoder})
Contenttype={text}
End Sub
 
Sub Delete
Me.Close
End Sub
 
Property Get CGIvar(xName As String) As String
CGIvar=curdoc.GetItemValue(xName)(0)
End Property
 
Private Property Set Content As String
 
End Property
 
Property Get GetRequestParams As Variant
On Error Goto ErrH
Dim s As String
s=Fulltrim(GetRequestQuery)
If Len(s)>0 Then
GetRequestParams=Split(s,{&})
Else
s=Fulltrim(GetRequestPost)
If Len(s)>0 Then GetRequestParams=Split(s,{&})
End If
Quit:
Exit Property
ErrH:
Me.PrintError(Me.RaiseError)
Resume Quit
End Property
 
Property Get GetRequestQuery As String
On Error Goto ErrH
используется Query_String_Decoded - не чувствует разницы между "+" и " "
это поведение типично и потому "+" -> " "
GetRequestQuery=curdoc.getItemValue("Query_String_Decoded")(0)
Quit:
Exit Property
ErrH:
Me.PrintError(Me.RaiseError)
Resume Quit
End Property
 
Property Get GetRequestPost As String
On Error Goto ErrH
GetRequestPost=curdoc.getItemValue("Request_Content")(0)
Quit:
Exit Property
ErrH:
Me.PrintError(Me.RaiseError)
Resume Quit
End Property
 
Property Get GetRequesPath As String
GetRequesPath=curdoc.getItemValueString("Path_Info_Decoded")
End Property
 
Sub PrintMsg(msg As String)
PrintHeader
msgList({message_} &Cstr(msgCount))=msg
msgCount=msgCount+1
End Sub
 
Function Decode(msg As String) As String
Decode=decoderClass.decode(msg)
End Function
 
Function DecodeUTF8(msg As String) As String
DecodeUTF8=decoderClass.decode(msg,{UTF-8})
End Function
 
Function DecodeCP1251(msg As String) As String
DecodeCP1251=decoderClass.decode(msg, {Cp1251})
End Function
 
Function DecodeAll(msg As String, enc As String) As String
DecodeAll=decoderClass.decode(msg, enc)
End Function
 
Function EncodeAll(msg As String, enc As String) As String
EncodeAll=encoderClass.encode(msg, enc)
End Function
 
Function Encode(msg As String) As String
Encode=encoderClass.encode(msg)
End Function
 
Sub PrintMsgEncoded(msg As String)
PrintHeader
msgList({messageEnc_} &Cstr(msgCount))=encoderClass.encode(msg)
End Sub
 
Private Function PrintHeader As Boolean
On Error Goto ErrH
If isPrintedHeader Then Exit Function
возвращаем результат в UTF-8
Print {Content-Type: } &Contenttype &{; charset=UTF-8"} text/xml;application/xml;
Print {Content-Type: } &Contenttype &{; charset=Windows-1251"}
isPrintedHeader=True
Me.PrintHeader=True
Quit:
Exit Function
ErrH:
Error Err, RaiseError
End Function
 
Private Function PrintEnd As Boolean
If Not isPrintedHeader Then Exit Function
If isPrintedEnd Then Exit Function
isPrintedEnd=True
Me.PrintEnd=True
End Function
 
Private Sub PrintError(msg As String)
PrintHeader
errList({error_} &Cstr(errCount))=msg
errCount=errCount+1
End Sub
 
Sub Close
PrintEnd
End Sub
End Class
 
Class HttpBaseXML As HttpBase
Function PrintHeader As Boolean
Dim b As Boolean
b=HttpBase..PrintHeader
Me.PrintHeader=b
If Not b Then Exit Function
Print {<?xml version="1.0" encoding="UTF-8"?>}
Print {<response>}
End Function
 
Sub New()
Contenttype={text/xml}
End Sub
 
Sub PrintMsg(msg As String)
PrintHeader
Print {<message>} &msg &{</message>}
End Sub
 
Sub PrintMsgEncoded(msg As String)
PrintHeader
Print {<messageenc>} &encoderClass.encode(msg) &{</messageenc>}
End Sub
 
Function PrintEnd As Boolean
Dim b As Boolean
b=HttpBase..PrintEnd
Me.PrintEnd=b
If Not b Then Exit Function
Print {</response>}
End Function
 
Sub PrintError(msg As String)
Call HttpBase..PrintError(msg)
Print {<error><object>} & Typename(Me) &{</object><message>} &msg &{</message></error>}
End Sub
End Class
 
Class HttpBaseJSON As HttpBase
Function PrintHeader As Boolean
Dim b As Boolean
b=HttpBase..PrintHeader
Me.PrintHeader=b
If Not b Then Exit Function
Print |{"response":[|
Print |{|
End Function
 
Sub New
Contenttype="application/json"
End Sub
 
Function PrintEnd As Boolean
Dim b As Boolean
b=HttpBase..PrintEnd
Me.PrintEnd=b
If Not b Then Exit Function
Print |"end":"end"]}|
Print |"end":"end"}|заглушка, чтобы не заморачиваться на оконечные запятые
End Function
 
Sub PrintMsg(msg As String)
PrintHeader
Print {"message":"} &msg &{",}
End Sub
 
Sub PrintMsgEncoded(msg As String)
PrintHeader
Print {"message_enc":"} &encoderClass.encode(msg) &{",}
End Sub
 
Sub PrintJSONvar(xName As String, xValue As String)
PrintHeader
Print {"} &xName &{":"} &xValue &{",}
End Sub
 
Sub PrintError(msg As String)
Call HttpBase..PrintError(msg)
Print |"error":{"object":"| & Typename(Me) &|", "message":"| &msg &|"},|
End Sub
 
Sub Close
разделим потоки ошибок и сообщений
выводим ошибки из буфера
Print |errors:[|
Forall e In errList
Print |{"| & Listtag(e) & |":{"object":"| & Typename(Me) &|", "message":"| & e &|"}},|
End Forall
если первым елементом - errors[0]=="end" - нет ошибок
Print |"end"],| зглушка окончания списка ошибок
выаодим сообщения из буфера
Print |messages:[|
Forall m In msgList
Print |{"| &Listtag(m) &|":"| &m &|"},|
Print |"| &m &|",|
End Forall
если первым елементом - messages[0]=="end" - нет сообщений
Print |"end"],| заглушка окончания списка сообщений
HttpBase..Close
End Sub
End Class
 
Class HttpObj As HttpBaseJSON
End Class
мне кажется я выкладывал

этот класс для обработки GET и POST типа:v=httpObj.GetRequestParams
также - может выводить результат, в т.ч. в JSON
декодит и энкодит - это важно для не анлийских языков
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
29.01.2013, 18:45
Товарищи, заработало.

Если коротко, то получилось так: на офф. форуме прочитал что домино при аплоде валидейтит пост мессыдж относительно формы в базе, которая указана в самом постмесседже.
Сделал простенькую форму с одним FUC полем, посабмиттил её 100500 раз, почитал Request Body.
Вместе с разарботчиком апплета подделали такой же Request Body и начали засылать.
Надо подделывать вплоть до всяких мелочей ;)

Авторизация апплета тупо через посылку куки "DomAuthSessId" от залогиненного пользователя.
UNID формы в коде FUC для POST сообщения вычисляется динамически.

Речь идёт про вот этот кусок "%%File.c2256eec003c58a5.7f505793c5d3868 fc2257b0100376e50.$Body.0.70">, где
c2256eec003c58a5 - replica id базы
7f505793c5d3868fc2257b0100376e50 - UNID формы, где расположен FUC
0.70 - смещение FUC на форме.

Сильно помогли знания из своей же темы:

Пока буду доделывать.
Будут вопросы - ю а велком!!



Добавлено: Постится примерно так:
Referer - http://SERVER/PATH.nsf/UploadForm?OpenForm
Куда постится - http://SERVER/PATH.nsf/UploadForm?OpenForm&Seq=1

UploadForm - простенькая форма в базе, POST мессыдж который мы и фейковали в апплете.
0
0 / 0 / 0
Регистрация: 26.06.2006
Сообщений: 143
31.01.2013, 12:10
Omh,

только учитывай, что при редактировании формы/подформы с File Upload Control идентификатор $Body... будет меняться.

По-моему даже при простом пересохранении формы. 100% не помню, но вроде так.
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
31.01.2013, 13:10
Цитата Сообщение от Кирилл Шваб
Omh,

только учитывай, что при редактировании формы/подформы с File Upload Control идентификатор $Body... будет меняться.

По-моему даже при простом пересохранении формы. 100% не помню, но вроде так.
поэтому предложено было решение с сабформой тогда форму редактировать можно, а сабформу какбы и незачем
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
31.01.2013, 13:31
Кирилл Шваб
Не-не, оффсет сменится только в том случае, если ты перед FUC полем начнёшь пробивать энтера.
Я этого делать не собираюсь.
Аплод форма у меня статична, оффсет известен, всё работает

lmike
Да, это всё пройдено ещё в 2011 году в той теме, которую я указал в после с решением.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.01.2013, 13:31
Помогаю со студенческими работами здесь

Python: куда положить .py файл на сервере?
Всем привет! Я чайник в python, мой его хостинг поддрживает, но я не знаю как запускать программу. в cmd hello world я еще осилил,...

Не знаю куда положить файл для открытия
Объясните пожалуйста куда надо положить файл чтобы его открыл паскаль? Так и не понял как то сделать

Загрузить файл из интернета, изменить, и положить обратно
Мою программу пользователи скачивают из сети, и захотелось узнать, сколько людей ею пользуются. Для этого решил в том же месте, где...

Как "положить" Expolrer.exe или вызвать/положить любое другое приложение
Я вот написал псевдо троян, для удаленного управления второго компа, ведь лень вставать с одного места что выключить компьютер, выключение...

Куда следует положить txt файл для его чтения?
Добрый день. Вопрос, возможно, глупый, но я чёт завис на этот моменте... Есть файл с текстом, по факту - по одному предложению на одну...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru