PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Удаление картинок


Удаление картинок

Сообщений 1 страница 13 из 13

1

FreeImage() удаляет по номеру, а у меня ID после ResizeImage()
как по ид удалять картинки? идёт серьёзное пожирание памяти
сохранять номера?
использовать ImageID(), это не очень удобно, и переделывать много
вроде решения есть, но может есть более приличное решение?

0

2

newJS написал(а):

у меня ID после ResizeImage()

Точно также, используйте FreeImage().
В чем вообще сложность? ResizeImage() не создает новых картинок, а только изменяет их размер.

0

3

Пётр написал(а):

В чем вообще сложность?

а сложность в том, что сохраняется ID после ResizeImage(), а картинка удаляется по номеру
пришлось переделывать, сохранять номер и кругом распихивать  ImageID()
память перестала уходить

0

4

newJS написал(а):

сложность в том, что сохраняется ID после ResizeImage(), а картинка удаляется по номеру

ResizeImage не создает новые картинки. Все равно не понятно в чем сложность. Посмотреть бы код.

0

5

да переделал уже

imageID=ResizeImage(#number.....  может ты не знал что она возвращает imageID, отсюда и непонятки?
FreeImage(#number) и IsImage(#number)
в проге везде нужно было imageID, его я и сохранял, а номера "терялись"

вот из справки
Возвращаемое значение
Возвращает не нулевое значение, если операция прошла успешно, в противном случае ноль.
это самое не нулевое значение и есть imageID
неочевидно, но это факт

наверно надо было в лоб спросить о возможности получить из imageID обратно #number
что то такое было на старом форуме

0

6

newJS написал(а):

...
неочевидно, но это факт
...

В таких инструментах как PB всё таки лучше ориентироваться на документацию.
В другой версии, в другой системе, в другом тулките (gtk2,gtk3,qt5) факт может оказаться совсем и не фактом.

И конечно могу ошибаться, но во всех примерах думаю не зря в местах, где требуется не #number а ImageId(#number) всегда есть вызов функции получения системного ID включая циклы и прочее, а не получение его (ID) один раз в начале программы.
Возможно допускается, что в каких то случаях (а у PB таки есть теневая сборка мусора) ID в отличие от #number не статичен, т.е. может меняться но его всегда можно получить по #number.

p.s. Но это не точно (c) BigRussianBoss :glasses:

Отредактировано useful (06.12.2021 14:23:45)

0

7

да но, экзешник работать будет
а проблемы вылезут при попытке генерить по этим текстам, тут как повезёт :D

0

8

newJS написал(а):

imageID=ResizeImage(#number.....  может ты не знал что она возвращает imageID, отсюда и непонятки?

Смысл если функция требует номер картинки, а не системный идентификатор?

0

9

смысл? да всё просто, после ресайза везде требовался ИД, а номер только для удаления
вот только я не сразу это понял, двойные стандарты, что поделать

0

10

newJS
как всегда я путаюсь в терминах, пока всё не прочитаешь. Номер этот тот же ID, потому что  ID это идентификатор, а разве номер не является идентификатором, ну ладно если функция ImageID, то наверно надо считать что возвращает идентификатор, который я всегда называю дескриптор, англосаксы его называют хендл, ну или его можно назвать системный идентификатор в отличии от внутреннего PureBasic-овского.
Не важно, а разве нет WinAPI-функций по удалению? Конечно есть.

Код:
DestroyIcon_(hicon)

Кстати, весомый аргумент, если в используемых функциях требуется дескриптор, и я при каждом запросе в цикле буду вызывать ImageID(), то не будет ли тратится больше времени? Возможно есть некий массив-таблица "идентификатор=дескриптор" и функция ImageID просто обращается к номеру массива например 5 и берёт из адреса дескриптор и всё это достаточно быстро даже для цикла. В моём случае когда я использовал например 30 иконок и это бы точно не вызвало бы какого либо замедления.

Отредактировано AZJIO (09.12.2021 08:40:17)

0

11

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

0

12

newJS
В справке то написанное зависит от того кто писал. Пётр ещё на прошлом форуме сказал что в Linux нет декскриптора и там это называется идентификатором. Я предлагал упоминать "который в Windows называется дескриптором", дабы сразу понимать что за идентификатор. И позже и видел в справке "так называемый дескриптор" и частое его упоминание, как оказалось и в оригинале часто упоминается хендл т.е. дескриптор и даже есть отдельная страничка Handles and Numbers, поэтому я и призываю называть вещи теми именами, которыми они называются, дабы каждый раз не разгадывать какой именно идентификатор имеется ввиду.
Как я понимаю в среде программирование используется стойкое название Handle используемое в префиксах hwnd. Handle как я понимаю имеет дескриптор настолько уникальный что какой либо дескриптор не совпадает ни с каким другим дескриптором, будь то дескриптором окна, шрифта, кисти или иконки, он уникальный в ОС. И он в русскоязычных описаниях называется дескриптор.

Отредактировано AZJIO (09.12.2021 11:57:07)

0

13

newJS написал(а):

наверно надо было в лоб спросить о возможности получить из imageID обратно #number

https://www.purebasic.fr/english/viewtopic.php?t=72980

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Удаление картинок