Перейти к содержанию
Fire Monkey от А до Я

virus_forever

Пользователи
  • Постов

    16
  • Зарегистрирован

  • Посещение

Весь контент virus_forever

  1. Спасибо! Буду разбираться! Одно не понятно сразу: Где узнать что означают каждая из 9 переменных TMatrix? Matrix := CreateRotationMatrix(RadAngle); Matrix.m31 := P.X; Matrix.m32 := P.Y; Тут, например, идет прямое обращение к m31 и m32.
  2. Мне нужно вращать не TImage целиком на форме, в виде отдельного компонента. Мне нужно освоить матрицу преобразований холста Bitmap, чтобы научиться отрисовывать нужные мне примитивы и графические объекты под нужным углом и в нужном месте. Документации вменяемой по этому поводу нигде вменяемой нет. Вот и обратился за помощью сюда. Есть материалы по HTML5 Canvas, там тоже есть подобные методы - но как я не пытался воспроизвести их - на Delphi не получается. Даже схематично нарисовал на листочке весь процесс. О том КАК перемещается НАЧАЛО КООРДИНАТ у канвы при вызове translate и rotate. Вычитал, что нужно выполнить: .rotate(angle) + .translate(x + width\2, y+height\2) + .draw(-width\2, height\2, width, height) - все равно не получается. Если мы хотим вращать какой-то объект, например, картинку, необходимо правильно взаимодействовать методами rotate и translate, иначе мы никогда не попадём картинкой в нужное место. Самый простой способ осью вращения выбрать центр картинки и отрисовывать её в координаты (-width/2, -height/2). К примеру, мы хотим развернуть картинку размерами 50х50, находящуюся на координатах 100:100. Указываем translate в координату 125:125 и отрисовываем картинку в координату -25:-25. Альтернатива — использовать LibCanvas и метод rotatedImage(или drawImage в ближайшем будущем) и не напрягаться. procedure xDrawBitmapWithAngle(x,y: Integer; a: Single; Bmp: TBitmap); var AR: Single; HalfW, HalfH: Single; NM, OM: TMatrix; SrcRect, DstRect: TRectF; begin AR:= a * (Pi / 180); HalfW:= Bmp.Width / 2; HalfH:= Bmp.Height / 2; NM := TMatrix.CreateTranslation( x + HalfW, y + HalfH ) * TMatrix.CreateRotation( AR ); OM:= B.Canvas.Matrix; B.Canvas.SetMatrix( NM ); SrcRect:= RectF( 0, 0, Bmp.Width, Bmp.Height ); DstRect:= RectF( -HalfW, -HalfH, Bmp.Width, Bmp.Height ); B.Canvas.DrawBitmap(Bmp, SrcRect, DstRect, 1, False); B.Canvas.SetMatrix( OM ); end; Нарисованного изображения не видать. Скорее всего оно рисуется где то там, за пределами. Что я делаю и понимаю не так?
  3. virus_forever

    Вращение Bitmap

    Доброго времени суток! Подскажите, пожалуйста, как можно отрисовать Bitmap (схематично на рисунке представлен черным прямоугольником) с поворотом последнего на определенный угол (скажем 45, 90, или любой другой) относительно какой либо точки - например центра TBitMap`a. И потом определить координаты углов - A, B, C и D для дальнейшего использования. Я вычитал, что для этого используется TMatrix с ее методами и SetMatrix у Canvas. Но в матрицах можно сказать ничего не понимаю, и нету хорошего описания - что это и с чем это употребляют. Подскажите, пожалуйста! Заранее спасибо!
  4. Всем привет! Как правильно рисовать в физическом разрешении экрана устройства? procedure TForm2.btnImageScaledDrawClick(Sender: TObject); var B: TBitmap; ScreenSvc: IFMXScreenService; ScreenScale: Single; procedure FL(x,y,wh: Integer; s: single; c: TAlphaColor); begin B.Canvas.Fill.Color:= c; B.Canvas.Stroke.Kind := TBrushKind.Solid; B.Canvas.Stroke.Color := Fill.Color; B.Canvas.FillRect(RectF(x, y, x+round(wh * s), y+round(wh * s)), 0, 0, AllCorners, 1); end; function RGBAtoAlphaColor(r,g,b: Byte; a: Byte = 255): TAlphaColor; var rec: TAlphaColorRec; begin rec.R:=r; rec.G:=g; rec.B:=b; rec.A:=a; Result:= rec.Color; end; begin B:= TBitmap.Create; if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenSvc)) then begin ScreenScale:= ScreenSvc.GetScreenScale; ScreenSvc:= nil; end else begin ScreenScale:= 1; end; with B do begin Width:= Round(Image1.Width * ScreenScale); Height:= Round(Image1.Height * ScreenScale); with Canvas do begin BeginScene; SetMatrix(TMatrix.CreateScaling(1 / Scale, 1 / Scale) * Matrix); Clear(RGBAtoAlphaColor(0, 174, 219, 100)); FL(10,10,300,3,RGBAtoAlphaColor(209,17,65)); FL(10,10,300,2.5,RGBAtoAlphaColor (0,177,89)); FL(10,10,300,2,RGBAtoAlphaColor(243,119,53)); FL(10,10,300,1.5,RGBAtoAlphaColor(255,196,37)); FL(10,10,300,1,RGBAtoAlphaColor(73,5,96)); EndScene; end; end; Image1.Bitmap.Assign(B); FreeAndNil(b); end; На PC - разумеется все корректно. На Android - (физическое 1920х1080, масштаб 3, логическое 640х360) - рисует в логических координатах. Еле-еле помещается квадрат 300х300 пикселей. Может как то по-другому необходимо выводит созданный битмап? Заранее спасибо!
  5. Спасибо! А решение для сокетов есть? Для начала, хотя-бы TCP.
  6. Какие есть компоненты, кроме Indy для кроссплатформенной (Win, OS X, iOS и Android) работы с сетью? Это TCP/UDP Socket, HTTP и HTTPS.
  7. {$IFNDEF AUTOREFCOUNT} TTest = IInterface; {$ELSE} TTest = TInterfacedObject; {$ENDIF} ////////// var Obj: TTest; begin Obj:= TInterfacedObject.Create; //тут объект разрушается end; Это необходимо, для "магии", заключающейся при обязательном разрушении объекта в любом случае при выходе из функции (штатно, exit, ошибка, и.т.д.). Она работает. Но, вопрос в том - будет ли утечка памяти или что-то подобное? Заранее спасибо!
  8. Всем спасибо) Заработало) P.S. А существуют ли какие то ограничения на количество загруженых ресурсов? То бишь, результат выполнения функций BASS_StreamCreateFile и подобных? - стоит ли загружать все звуковые ресурсы, или следует следить за количеством?
  9. ZyBy Хорошо, спасибо за пояснение. Дело в том, что я хотел в будущем всю звуковую подсистемы вынести в отдельный поток. P.S. Не могу понять в чем дело. Скаченный пример с GitHub - FMX.Radio - успешно компилируется под Android, только один Warning выдает. Мой же тестовый пример - под Windows работает идеально (я даже некий оргазм испытал, голова по поводу звука болела больше всего - а тут, как я уже говорил - то что нужно. Работа с несколькими аудиопотоками (в том числе и из TMemoryStream) и разная громкость каждого). А под Android не хочет компилироваться. Checking project dependencies... Building libBASStest.dproj (Debug, Android) brcc32 command line for "libBASStest.vrc" c:\program files (x86)\embarcadero\studio\18.0\bin\cgrc.exe -c65001 "libBASStest.vrc" -folibBASStest.res dccaarm command line for "libBASStest.dpr" c:\program files (x86)\embarcadero\studio\18.0\bin\dccaarm.exe -$O- --no-config -B -Q -TX.so -AGenerics.Collections=System.Generics.Collections; Generics.Defaults=System.Generics.Defaults;WinTypes=Winapi.Windows;WinProcs=Winapi.Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE -DDEBUG -E.\develop\bin\Android\Debug -I"c:\program files (x86)\embarcadero\studio\18.0\lib\Android\debug";"c:\program files (x86)\embarcadero\studio\18.0\lib\Android\Release" -LEC:\Users\Public\Documents\Embarcadero\Studio\18.0\Bpl\Android -LNC:\Users\Public\Documents\Embarcadero\Studio\18.0\Dcp\Android -NU.\develop\dcu\Android\Debug -NSSystem;Xml;Data;Datasnap;Web;Soap; -O"c:\program files (x86)\embarcadero\studio\18.0\lib\Android\Release" -R"c:\program files (x86)\embarcadero\studio\18.0\lib\Android\Release" -U"c:\program files (x86)\embarcadero\studio\18.0\lib\Android\debug";"c:\program files (x86)\embarcadero\studio\18.0\lib\Android\Release" --libpath:E:\_PlatformSDKs\android-ndk-r9c\sources\cxx-stl\gnu-libstdc++\4.8\libs\armeabi-v7a; E:\_PlatformSDKs\android-ndk-r9c\platforms\android-14\arch-arm\usr\lib --linker:E:\_PlatformSDKs\android-ndk-r9c\toolchains\arm-linux-androideabi-4.8\prebuilt\windows\bin\arm-linux-androideabi-ld.exe -V -VN -NO.\develop\dcu\Android\Debug libBASStest.dpr [DCC Error] E2597 E:\_PlatformSDKs\android-ndk-r9c\toolchains\arm-linux-androideabi-4.8\prebuilt\windows\bin\arm-linux-androideabi-ld.exe: error: cannot find -lbass C:\Users\Яков\Documents\Embarcadero\Studio\Projects\BassDLLTest\develop\dcu\Android\Debug\BASS.o:BASS:function Bass::BASS_ErrorGetCode(): error: undefined reference to 'BASS_ErrorGetCode' C:\Users\Яков\Documents\Embarcadero\Studio\Projects\BassDLLTest\develop\dcu\Android\Debug\BASS.o:BASS:function Bass::BASS_Init(int, unsigned int, unsigned int, void*, void*): error: undefined reference to 'BASS_Init' C:\Users\Яков\Documents\Embarcadero\Studio\Projects\BassDLLTest\develop\dcu\Android\Debug\BASS.o:BASS:function Bass::BASS_Free(): error: undefined reference to 'BASS_Free' C:\Users\Яков\Documents\Embarcadero\Studio\Projects\BassDLLTest\develop\dcu\Android\Debug\BASS.o:BASS:function Bass::BASS_StreamCreateFile(int, void*, long long, long long, unsigned int): error: undefined reference to 'BASS_StreamCreateFile' C:\Users\Яков\Documents\Embarcadero\Studio\Projects\BassDLLTest\develop\dcu\Android\Debug\BASS.o:BASS:function Bass::BASS_ChannelPlay(unsigned int, int): error: undefined reference to 'BASS_ChannelPlay' C:\Users\Яков\Documents\Embarcadero\Studio\Projects\BassDLLTest\develop\dcu\Android\Debug\BASS.o:BASS:function Bass::BASS_ChannelStop(unsigned int): error: undefined reference to 'BASS_ChannelStop' C:\Users\Яков\Documents\Embarcadero\Studio\Projects\BassDLLTest\develop\dcu\Android\Debug\BASS.o:BASS:function Bass::BASS_ChannelPause(unsigned int): error: undefined reference to 'BASS_ChannelPause' C:\Users\Яков\Documents\Embarcadero\Studio\Projects\BassDLLTest\develop\dcu\Android\Debug\BASS.o:BASS:function Bass::BASS_ChannelSetAttribute(unsigned int, unsigned int, float): error: undefined reference to 'BASS_ChannelSetAttribute' C:\Users\Яков\Documents\Embarcadero\Studio\Projects\BassDLLTest\develop\dcu\Android\Debug\BASS.o:BASS:function Bass::BASS_ChannelGetAttribute(unsigned int, unsigned int, float&): error: undefined reference to 'BASS_ChannelGetAttribute' [DCC Fatal Error] F2588 Linker error code: 1 ($00000001) Failed Elapsed time: 00:00:21.4 Компилятор: Delphi 10.1 Berlin D.P.F Delphi Android Native Components: Установить не получилось. Так ли нужны ли они для работы BASS? Ведь, скажем, тот-же FMX.Radio я только собрал, а на устройстве - не проверял! В чем может быть проблема?
  10. Спасибо больше еще раз! То что нужно!!! Вопросик появился: а в отдельном потоке библиотека работает? - у меня почему-то не хочет... Или в этом нет необходимости?
  11. Спасибо большое за ответ! Пойду посмотрю пример!
  12. Доброго времени суток! Подскажите, пожалуйста, возможно ли как то в приложениях, написанных с использованием FMX, одновременно проигрывать несколько звуков? - скажем фоновую мелодию и пару-тройку звуковых эффектов. Если да, то как? Самое главное, чтобы работало на всех доступных платформах. Сперва Win, Android, а потом - OSX и iOS. Помогите, пожалуйста! С уважением, Яков.
  13. Приветствую!!! Я совсем запутался с этим делом! Как-то все вроде просто, и сложно одновременно. У меня есть Sony Ericsson XPERIA Pro. Параметры экрана такие: -Density: 1.5 -Density Dpi: 240 -Scaled Density: 1.5 -Width Pixels: 480 -Height Pixels: 854 -X Dpi: 240.0 -Y Dpi: 240.0 FireMonkey приложение выдает такие данные формы .Width: 320 .Height: 544 .ClientWidth: 320 .ClientHeight: 544 Все это равно *1.5, за исключением высоты - вычитается строка состояния, и получается 816 пикселей. Вот... А собственно, каких размеров мне делать нужно заготовку изображения? Сколько точек на дюйм? Какие размеры прописывать в конфиг? Использую Delphi XE7! Заранее спасибо!!!
×
×
  • Создать...