Steepe_Hare
-
Постов
174 -
Зарегистрирован
-
Посещение
Активность репутации
-
Steepe_Hare отреагировална Brovin Yaroslav в Приложения для Android, сделанные в Embarcadero RAD
Часть есть здесь:
http://fire-monkey.ru/forum/18-приложения-написанные-с-использованием-firemonkey/
Часть нужно искать по интернету...
-
Steepe_Hare отреагировална Равиль Зарипов (ZuBy) в Приложения для Android, сделанные в Embarcadero RAD
@Евгений Корепов https://play.google.com/store/apps/developer?id=Евгений Корепов&hl=ru
@ra.eremeev https://play.google.com/store/apps/details?id=com.embarcadero.MSPGOR&hl=ru
других не помню, но их достаточно
-
Steepe_Hare отреагировална Brovin Yaroslav в [Android] Почему возникает ошибка ECanvasException 'Handle not allocated'?
Дело в том, что у вас Image1.Bitmap, как экземпляр класса TBitmap присутствует. НО в нем нету никакой информации. То есть по факту у него размер равен 0 на 0. Это значит, что для него хендл не будет выделяться (Зачем системе хранить пустой битмап). Поэтому, когда вы пытаетесь с ним поработать и получить доступ к канве, то получаете такую ошибку:
raised exception class ECanvasException with message 'Handle not allocated' Теперь смотрим ваш код:
Image1.Bitmap.Canvas.BeginScene; Будет работать с канвой, но хендла нет. отсюда будет исключение.
Image1.Bitmap.Clear(0); Опять же работает с канвой и пытается очистить пустой битмап.
Image1.Bitmap.LoadFromStream(MemStream); Это корректный вызов, при загрузке нового битмапа будет выделен хендл на уровне Image1.Bitmap.
Соответственно, вам нужно:
Сформировать новый битмап Загрузить его в Image1.Bitmap На Windows используется GDI+/Direct2D канва, которая может работать по другому. А на мобильных платформах GPU, поэтому у вас и возникает ошибка.
-
Steepe_Hare отреагировална Равиль Зарипов (ZuBy) в [Android] Почему возникает ошибка ECanvasException 'Handle not allocated'?
Image1.Bitmap.Canvas.BeginScene; ... Image1.Bitmap.Canvas.EndScene; это тут не нужно, т.к. не работаете с Canvas'ом
-
Steepe_Hare отреагировална Brovin Yaroslav в [Android] Почему возникает ошибка ECanvasException 'Handle not allocated'?
В какой момент создаете битмап?
-
Steepe_Hare отреагировална kami в TBitmap и экономия памяти
Не совсем. То есть - технически правильно, но идеологически - нет.
Проведем мысленный эксперимент: что случится, если на BeginScene возникнет исключение? Правильно, битмап не будет уничтожен, потому что этот код не выполнялся внутри Try. Поэтому, если заниматься буквоедством, то код должен выглядывать так:
MyBitmap := TBitmap.CreateFromFile(OpenDialog1.Files[0]); try Image1.Bitmap.Canvas.BeginScene; try Image1.Bitmap.Canvas.DrawBitmap(MyBitmap, MyRect, MyRect, 20); finally Image1.Bitmap.Canvas.EndScene; end; finally myBitmap.Free; end; -
Steepe_Hare отреагировална Прикладной в Firemonkey Knowledge Base
Смущает, наверное, то, что нет русской справки
-
Steepe_Hare отреагировална Равиль Зарипов (ZuBy) в TBitmap и экономия памяти
обязательно нужно очистить