Steepe_Hare
-
Постов
174 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Steepe_Hare
-
-
В 08.10.2016 в 13:58, Kitty сказал:
Большое спасибо Ярославу, что находит время и фиксит проблемы, которые мы тут поднимаем. И курсы его великолепные!
а что за курсы?
-
Как ведет себя приложение, написанное для Андроид, со множеством таймеров? Не подтормаживает ли? Корректно ли считают время таймеры?
Делаю мобильное приложение что-то вроде Фермы или Запорожья, и там многое построено на отсчетах промежутков времени.
-
Рисует черный квадрат, а битмап не виден(
if OpenDialog1.Execute then begin MyBitmap := TBitmap.CreateFromFile(OpenDialog1.Files[0]); MyRect := TRectF.Create(50, 30, 65, 45); Image1.Bitmap.Canvas.BeginScene; Image1.Bitmap.Canvas.DrawBitmap(MyBitmap, MyRect, MyRect, 1); Image1.Bitmap.Canvas.EndScene; MyBitmap.Free; end;
-
Уже который день замечаю такую ситуацию.
Исходные данные: Windows 7 на компе, Delphi Berlin 10.1, отладка на смартфоне Samsung Galaxy S4. Запускаю сеанс Берлина. После трех-четырех запусков приложения из среды на мобильнике при старте - просто черный экран. В среде недоступна функция Program Reset (Ctrl + F2). Если попытаться закрыть среду, то сообщение "This current debug session must end before the requested operation can complete. Please indicate how you would like to end the debug session." (Terminate, Detach, Cancel, Help) и зависание. Приходится просто снимать bds.exe в Диспетчере задач.
Android-приложение при этом корректно создается, и если его запускать с Приложений мобильника, то оно запускается и работает нормально.
-
Нашел причину ошибки!
Если в самой среде на этапе дизайн-тайм загрузить картинку, то расчерчивание в ран-тайме идет корректно.
Но если грузить картинку в битмап в OnCreate из ресурсов, то расчерчивание странным образом идет. Часть линий как будто накладывается друг на друга.
Как исправить во втором случае? Спасибо заранее.
-
10 минут назад, ZuBy сказал:
скорей всего у вас трансформируется Image, Align/Anchors стоят?
Align = None, Anchors = [akLeft,akTop]
-
Объясните, пожалуйста, почему этот простой код работает по-разному в Win32 и на Андроиде? Картинка 150x200 в битмап уже загружена и нужно ее расчертить.
Image1.Bitmap.Canvas.BeginScene; try Image1.Bitmap.Canvas.Stroke.Kind := TBrushKind.Solid; Image1.Bitmap.Canvas.Stroke.Color := TAlphaColors.Blue; for I := 0 to 9 do Image1.Bitmap.Canvas.DrawLine(TPointF.Create(I * 15, 0), TPointF.Create(I * 15, Image1.Bitmap.Height), 1); for J := 0 to 9 do Image1.Bitmap.Canvas.DrawLine(TPointF.Create(0, J * 20), TPointF.Create(Image1.Bitmap.Width, J * 20), 1); finally Image1.Bitmap.Canvas.EndScene; end;
Под Виндой создается точная сетка 10x10, а под Андроид как будто другая система координат и территория делится на огромные квадраты (больше, чем надо).
-
А есть ли список приложений для Android, сделанных в среде Embarcadero RAD? (с ссылками)
Просто хочется посмотреть, на что способны (в плане графики) игры, сделанные на FireMonkey.
Спасибо.
-
3 часа назад, Brovin Yaroslav сказал:
На Windows используется GDI+/Direct2D канва, которая может работать по другому. А на мобильных платформах GPU, поэтому у вас и возникает ошибка.
Большое спасибо за подробное объяснение
-
13 минут назад, Brovin Yaroslav сказал:
Убедитесь, что Image.Bitmap есть.
Извиняюсь, но не совсем вас понял. Image.Bitmap пустой в дизайн-тайме (а он обязан быть заполненным??). Картинка туда грузится из ресурсов только в ран-тайме.
-
18 минут назад, Brovin Yaroslav сказал:
В каком потоке работаете: В главном или отдельном?
В вашем коде Image.Bitmap пустой.
в главном потоке. Image.Bitmap грузит из ресурсов картинку. Под Win32 всё работает
-
24 минуты назад, Brovin Yaroslav сказал:
В какой момент создаете битмап?
Вот этот код дает ошибку. Что в нем не так?
var MemStream: TMemoryStream; begin Image1.Bitmap.Canvas.BeginScene; MemStream := TMemoryStream.Create; try Image1.Bitmap.Clear(0); with TResourceStream.Create(hInstance, PChar('territoria'), RT_RCDATA) do try SaveToStream(MemStream); finally Free; end; MemStream.Position := 0; Image1.Bitmap.LoadFromStream(MemStream); finally Image1.Bitmap.Canvas.EndScene; MemStream.Free; end;
Image1 в дизайн-тайме пустой.
-
53 минуты назад, ZuBy сказал:
ну желательно код показать
Выбрасывает на модуль FMX.Canvas.GPU в конструктор:
constructor TCanvasGpu.CreateFromBitmap(const ABitmap: TBitmap;
const AQuality: TCanvasQuality = TCanvasQuality.SystemDefault);....
begin
....
if not Bitmap.HandleAllocated then
raise ECanvasException.Create('Handle not allocated'); -
Под Windows 32 приложение собирается и работает отлично, под Android при запуске из RAD-среды сразу говорит: Project project1.apk raised exception class ECanvasException with message 'Handle not allocated' и отказывается работать.
В чем может быть причина?
-
28 минут назад, kami сказал:
Спасибо
-
36 минут назад, MAD_EVAL сказал:
Покажите пример. Opacity это single от 0 до 1....
http://docwiki.embarcadero.com/CodeExamples/Berlin/en/FMXTCanvasDrawFunctions_(Delphi)
procedure TForm1.DrawLineClick(Sender: TObject); var p1, p2: TPointF; begin // sets the ends of the line to be drawn p1 := TPointF.Create(20, 2); p2 := TPointF.Create(350, 400); Image1.Bitmap.Canvas.BeginScene; // draws the line on the canvas Image1.Bitmap.Canvas.DrawLine(p1, p2, 100); Image1.Bitmap.Canvas.EndScene; end;
-
10 минут назад, Rusland сказал:
Opacity - прозрачность, должен быть от 0 до 1
я видел и 100 значение в одном офиц.примере
-
19 минут назад, Rusland сказал:
Steepe_Hare, AOpacity в DrawBitmap какой-то странный. Почему 20?
А так MyBitmap.Free оформлено верно.
Отсюда взял:
http://docwiki.embarcadero.com/CodeExamples/Berlin/en/FMXTCanvasDrawFunctions_(Delphi)
-
1 час назад, ZuBy сказал:
обязательно нужно очистить
Вот так получше?
Image1.Bitmap.Clear(TAlphaColors.White); if OpenDialog1.Execute then begin MyRect := TRectF.Create(50, 30, 150, 200); MyBitmap := TBitmap.CreateFromFile(OpenDialog1.Files[0]); Image1.Bitmap.Canvas.BeginScene; try Image1.Bitmap.Canvas.DrawBitmap(MyBitmap, MyRect, MyRect, 20); finally Image1.Bitmap.Canvas.EndScene; MyBitmap.Free; end; end;
-
Пример, взятый из Интернета:
// clears the canvas Image1.Bitmap.Clear(TAlphaColors.White); // loads the bitmap using the TOpenDialog. if OpenDialog1.Execute then MyBitmap := TBitmap.CreateFromFile(OpenDialog1.Files[0]); // set the MyRect coordinates MyRect := TRectF.Create(50, 30, 150, 200); Image1.Bitmap.Canvas.BeginScene; // draws on the rectangle specified by MyRect the area from MyBitmap specified by MyRect Image1.Bitmap.Canvas.DrawBitmap(MyBitmap, MyRect, MyRect, 20); Image1.Bitmap.Canvas.EndScene;
Если мы, допустим, раз в секунду повторяем эту процедуру, постоянно загружая в Image1 новый MyBitmap, то нужно ли делать MyBitmap.Free или очистка памяти происходит сама?
-
Раньше для Delphi был DKB (Delphi Knowledge Base), такой огромный сборник советов и примеров для программирования в среде Delphi (Tips and Tricks)
Нет ли чего-то подобного для Firemonkey?
У меня не работает DrawBitmap
в Графика
Опубликовано
Ошибку дает при сохранении:
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EBitmapSavingFailed with message 'Saving bitmap failed.'.
---------------------------
Break Continue Help
---------------------------