Лидеры
Популярный контент
Показан контент с высокой репутацией 20.10.2016 во всех областях
-
Для конвертации можете использовать TBitmapCodecManager. Например, так я его использую для сохранения файлов в различном формате: var aExtention, aFileName: string; aFileStream: TFileStream; aSaveParams: TBitmapCodecSaveParams; aSurf: TBitmapSurface; aBitmap: TBitmap ..... aFileStream := TFileStream.Create(aFileName, fmCreate); try aSurf := TBitmapSurface.Create(); try aSurf.Assign(aBitmap); aSaveParams.Quality := 70; TBitmapCodecManager.SaveToStream(aFileStream, aSurf, aExtention, @aSaveParams); finally FreeAndNil(aSurf); end; finally FreeAndNil(aFileStream); end; Для сохранения jpg использую aExtention='.jpg' и т.д. И почему Вы используете TJPEGImage и TgifImage? Они разве есть в FMX? TImage.Bitmap читается из файла так: var aImage: TImage; aFileName: string; ... aImage.Bitmap.LoadFromFile(aFileName);3 балла
-
Fire-Monkey в Telegram
Rusland и ещё один отреагировал Равиль Зарипов (ZuBy) за вопрос
1) чат не создавался как решение проблемных вопросов, мы всегда отправляем на форум, если тема достойна огласки 2) чат создан чтобы объединить разработчиков FMX, т.к. неформальное общение на форуме не поощряется 3) в чате решаются проблемы одной строкой 4) рассуждения что такое "хорошо", что такое "плохо" 5) с помощью чата решено не мало вопросов (от себя, спасибо активным участникам чата в тестировании) мы никому насильно не навязываем, кому интересно такая атмосфера они уже с нами2 балла -
Наложение картинки на фото
Kitty и ещё один отреагировал Равиль Зарипов (ZuBy) за вопрос
procedure TForm5.TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap); var aBitmap: TBitmap; aRectF: TRectF; begin aBitmap := TBitmap.Create; aBitmap.SetSize(Image.Width, Image.Height); aBitmap.CopyFromBitmap(Image); aBitmap.Canvas.BeginScene; aRectF := RectF(aBitmap.Width - Image2.Bitmap.Width, aBitmap.Height - Image2.Bitmap.Height, aBitmap.Width, aBitmap.Height); aBitmap.Canvas.DrawBitmap(Image2.Bitmap, Image2.Bitmap.BoundsF, aRectF, 1, true); aBitmap.Canvas.EndScene; Image1.Bitmap.Assign(aBitmap); aBitmap.Free; end; Kitty void __fastcall TFormCamera::TakePhotoFromCameraAction1DidFinishTaking(TBitmap *Image) { //умный указатель чтобы не использовать delete std::unique_ptr<TBitmap> aBitmap(new TBitmap()); TRectF aRectF; aBitmap->SetSize(Image->Width, Image->Height); aBitmap->CopyFromBitmap(Image); aBitmap->Canvas->BeginScene(); aRectF = RectF(aBitmap->Width - Form1->Image1->Bitmap->Width, aBitmap->Height - Form1->Image1->Bitmap->Height, aBitmap->Width, aBitmap->Height); aBitmap->Canvas->DrawBitmap(Form1->Image1->Bitmap, Form1->Image1->Bitmap->BoundsF, aRectF, 1, true); aBitmap->Canvas->EndScene(); Image1->Bitmap->Assign(aBitmap.get()); //сохранить в галерею _di_IFMXPhotoLibrary Service; if (TPlatformServices::Current->SupportsPlatformService(__uuidof(IFMXPhotoLibrary), &Service)) { Service->AddImageToSavedPhotosAlbum(Image1->Bitmap); } } Image1 - TImage с конечным результатом Image2 - с логотипом2 балла -
Не придерайся)))) Главное все поняли!2 балла
-
Видео из картинок
Steepe_Hare и ещё один отреагировал Rusland за вопрос
Вот пример Осипова c BitmapListAnimation... но у меня почему-то картинка едет в сторону при анимации. Может кто-нибудь сможет разобраться в чем причина?2 балла -
TBitmap -> TJPEGImage и TgifImage
Kitty и ещё один отреагировал Равиль Зарипов (ZuBy) за вопрос
модули Jpeg, PngImg (для gif не помню как называется), там есть нужные классы2 балла -
TBitmap -> TJPEGImage и TgifImage
Kitty и ещё один отреагировал Равиль Зарипов (ZuBy) за вопрос
TBitmap это общий класс для работы с картинками, он всеядный Это не VCL где нужно подбирать класс под расширение файла2 балла -
Таймер в сервисе
Tarik Live и ещё один отреагировал dnekrasov за вопрос
В архиве - простенький проект. Протестирован на Win и OSX. TimerThreadDemo.zip2 балла -
Таймер в сервисе
Tarik Live и ещё один отреагировал dnekrasov за вопрос
Когда-то, лет 5 назад у меня возникла такая-же проблема, только в Win32-сервисе. Тогда, для её решения, я написал 2 простеньких класса. Вот код, может пригодится? unit Utils.TimerThread; interface uses System.Classes, System.SysUtils, System.SyncObjs; type TCustomTimerThread = class abstract (TThread) private FLock: TCriticalSection; FCancelledEvent: TSimpleEvent; FInterval: Integer; FOnTimer: TNotifyEvent; function GetInterval: Integer; function GetOnTimer: TNotifyEvent; procedure SetInterval(const Value: Integer); procedure SetOnTimer(const Value: TNotifyEvent); protected procedure Lock; procedure Unlock; procedure Sleep(AInterval: Integer); reintroduce; procedure TerminatedSet; override; procedure DoOnTimer; virtual; public constructor Create(AInterval: Integer; AOnTimer: TNotifyEvent); reintroduce; procedure BeforeDestruction; override; procedure Cancel; virtual; property Interval: Integer read GetInterval write SetInterval; /// <summary> /// <para> /// За синхронизацией потоков отвечает поток в котором обрабатывается OnTimer /// </para> /// <para> /// !!! НЕ ЗАБЫВАТЬ ПРО ЭТО !!! /// </para> /// </summary> property OnTimer: TNotifyEvent read GetOnTimer write SetOnTimer; end; /// <summary> /// Simple wait thread /// </summary> /// <remarks> /// <para> /// !!! Important !!! /// </para> /// <para> /// Use Cancel instead of Terminate. You can get ThreadExternalTerminate /// exception in multi-thread applications /// </para> /// </remarks> TWaitThread = class(TCustomTimerThread) protected procedure Execute; override; public end; /// <summary> /// Thread independed timer /// </summary> /// <remarks> /// <para> /// !!! Important !!! /// </para> /// <para> /// Use Cancel instead of Terminate. You can get ThreadExternalTerminate /// exception in multi-thread applications /// </para> /// </remarks> TTimerThread = class(TCustomTimerThread) private FEnabled: Boolean; function GetEnabled: Boolean; procedure SetEnabled(const Value: Boolean); protected procedure Execute; override; public constructor Create(AInterval: Integer; AOnTimer: TNotifyEvent; AEnabled: Boolean = True); reintroduce; property Enabled: Boolean read GetEnabled write SetEnabled; end; implementation { TCustomTimerThread } procedure TCustomTimerThread.BeforeDestruction; begin FLock.Free; FreeAndNil(FCancelledEvent); inherited; end; constructor TCustomTimerThread.Create(AInterval: Integer; AOnTimer: TNotifyEvent); begin inherited Create; FInterval := AInterval; FOnTimer := AOnTimer; FreeOnTerminate := True; FLock := TCriticalSection.Create; FCancelledEvent := TSimpleEvent.Create; FCancelledEvent.ResetEvent; end; procedure TCustomTimerThread.Cancel; begin FCancelledEvent.SetEvent; end; procedure TCustomTimerThread.DoOnTimer; begin if Assigned(OnTimer) then OnTimer(Self); end; function TCustomTimerThread.GetInterval: Integer; begin Lock; try Result := FInterval; finally Unlock; end; end; function TCustomTimerThread.GetOnTimer: TNotifyEvent; begin Lock; try Result := FOnTimer; finally Unlock; end; end; procedure TCustomTimerThread.Lock; begin FLock.Enter; end; procedure TCustomTimerThread.SetInterval(const Value: Integer); begin Lock; try FInterval := Value; finally Unlock; end; end; procedure TCustomTimerThread.SetOnTimer(const Value: TNotifyEvent); begin Lock; try FOnTimer := Value; finally Unlock; end; end; procedure TCustomTimerThread.Sleep(AInterval: Integer); begin FCancelledEvent.WaitFor(AInterval); end; procedure TCustomTimerThread.TerminatedSet; begin inherited; FCancelledEvent.SetEvent; end; procedure TCustomTimerThread.Unlock; begin FLock.Leave; end; { TWaitThread } procedure TWaitThread.Execute; begin if FCancelledEvent.WaitFor(FInterval) = wrTimeout then DoOnTimer; end; { TTimerThread } constructor TTimerThread.Create(AInterval: Integer; AOnTimer: TNotifyEvent; AEnabled: Boolean); begin inherited Create(AInterval, AOnTimer); FOnTimer := AOnTimer; FEnabled := AEnabled; end; procedure TTimerThread.Execute; begin while not Terminated do case FCancelledEvent.WaitFor(FInterval) of wrTimeout: begin if Enabled then DoOnTimer; end; else Break; end; end; function TTimerThread.GetEnabled: Boolean; begin Lock; try Result := FEnabled; finally Unlock; end; end; procedure TTimerThread.SetEnabled(const Value: Boolean); begin Lock; try FEnabled := Value; finally Unlock; end; end; end.2 балла -
Создана группа для знакомства и общения разработчиков, использующих инструменты Fire-Monkey. Небольшой свод правил в группе Fire-Monkey: - Не стоит описывать проблему, скрины и тд. не изучив необходимую литературу и форум, если решения все-таки нет, необходимо создать тему на форуме fire-monkey.ru и скинуть в группу ссылку; - необходимо учитывать часовые пояса, в случае если на тему в Форуме долго нет ответа; - можно постить новости IT-рынка связанных с Fire-Monkey и RAD-studio, iOS и Android; - «баяны», «мемы» и приколы касательно тематике чата приветствуются, желательно в небольшом количестве; - скриншоты и описание программ написанных на Fire-Monkey тоже приветствуются; - будьте вежливыми, ведь вежливость – это утонченность речи, благопристойность манер и поведения; Запрещено: - запрещено задавать элементарные вопросы касательно разработки, для этого есть куча литературы; - запрещены сообщения с большим описание проблемы и кода, для этого есть всем известный форум; - навязчивая реклама компании\приложения в чате под запретом; - оскорбления в адрес участников и в адрес Embarcadero запрещены; - запрещены спам, порнография и подобная грязь; @fire_monkey в Telegram1 балл
-
Наложение картинки на фото
Kitty отреагировал Равиль Зарипов (ZuBy) за вопрос
увы не пользуюсь вайбером, не могу проестировать...1 балл -
1 балл
-
Наложение картинки на фото
Kitty отреагировал Равиль Зарипов (ZuBy) за вопрос
ShowShareSheetAction1->Bitmap->Assign(Image1->Bitmap);1 балл -
Наложение картинки на фото
Kitty отреагировал Равиль Зарипов (ZuBy) за вопрос
да правильно, вот так короче Image1->Bitmap->SetSize(aBitmap->Width, aBitmap->Height); зачем использовать разные методы для IOS/Android?1 балл -
Наложение картинки на фото
Равиль Зарипов (ZuBy) отреагировал Kitty за вопрос
Значит правильно так Image1->Bitmap->Width = aBitmap->Width; Image1->Bitmap->Height = aBitmap->Height; Image1->Bitmap->CopyFromBitmap(aBitmap.get()); А в iOS можно оставить Image1->Bitmap->Assign(aBitmap.get()); там логотип не пропадает при переводе в фон. Все правильно?1 балл -
Наложение картинки на фото
Kitty отреагировал Равиль Зарипов (ZuBy) за вопрос
такое поведение когда используется Assign, поэтому везде нужно заменить на CopyFromBitmap (не забываем что там используется копирование один-в-один, т.е. размеры должны быть одинаковы у обоих Bitmap'ов)1 балл -
Наложение картинки на фото
Kitty отреагировал Равиль Зарипов (ZuBy) за вопрос
Попробуйте выставить MaxHeight, MaxWidth больше в экшене1 балл -
Наложение картинки на фото
Kitty отреагировал Равиль Зарипов (ZuBy) за вопрос
да поведение подтвердилось, от параметра NeedSaveToAlbum никак не зависит1 балл -
Наложение картинки на фото
Равиль Зарипов (ZuBy) отреагировал Kitty за вопрос
Правильно ли поведение на андроиде - фотография без логотипа падает в папку Камера и в этой папке это фотография без логотипа. Одновременно с этим фотография попадает в паку Saved Photos и как положено с логотипом на фото. Т.е. на андроиде мы имеем фото в двух местах? void __fastcall TFormCamera::TakePhotoFromCameraAction1DidFinishTaking(TBitmap *Image) { //умный указатель чтобы не использовать delete std::unique_ptr<TBitmap> aBitmap(new TBitmap()); TRectF aRectF; aBitmap->SetSize(Image->Width, Image->Height); aBitmap->CopyFromBitmap(Image); aBitmap->Canvas->BeginScene(); aRectF = RectF(aBitmap->Width - Form1->Image1->Bitmap->Width, aBitmap->Height - Form1->Image1->Bitmap->Height, aBitmap->Width, aBitmap->Height); aBitmap->Canvas->DrawBitmap(Form1->Image1->Bitmap, Form1->Image1->Bitmap->BoundsF, aRectF, 1, true); aBitmap->Canvas->EndScene(); Image1->Bitmap->Assign(aBitmap.get()); //сохранить в галерею _di_IFMXPhotoLibrary Service; if (TPlatformServices::Current->SupportsPlatformService(__uuidof(IFMXPhotoLibrary), &Service)) { Service->AddImageToSavedPhotosAlbum(Image1->Bitmap); } }1 балл -
Наложение картинки на фото
Равиль Зарипов (ZuBy) отреагировал Kitty за вопрос
Вот он каменный цветок: _di_IFMXPhotoLibrary Service;1 балл -
Если XCode 8 (что, собственно, и должно было произойти при обновлении) то работать не будет. Для 8 хкода нужен 10.1 берлин1 балл
-
Наложение картинки на фото
Kitty отреагировал Равиль Зарипов (ZuBy) за вопрос
объявили переменную? Service: IFMXPhotoLibrary1 балл -
Fire-Monkey в Telegram
Rusland отреагировал Равиль Зарипов (ZuBy) за вопрос
Почистил тему, т.к. был оффтоп Напоминаю: Присоединяйтесь к нашему ламповому чату в телеграм, обсуждаем много всего интересного.1 балл -
Развертка на Mac
Vitaldj отреагировал Равиль Зарипов (ZuBy) за вопрос
покажите скрин Tools-Options-SDK Manager1 балл -
Наложение картинки на фото
Kitty отреагировал Равиль Зарипов (ZuBy) за вопрос
все правильно. сохраняется оригинальный файл, который приходит параметром Image, а наложение уже идет после. можете поставить NeedSaveToAlbum=false и сами сохранить картинку в галерее P.S. только как сохранять в IOS я незнаю. нужно смотреть исходники1 балл -
Подозреваю, что это связано с тем, что картинка размером 1317*66, а должна быть 1320*66 (20*66=1320). Проверил свою серию изображений в вашей программе, где размеры совпадают - воспроизвелось нормально.1 балл
-
Верхний регистр для кирилицы
Равиль Зарипов (ZuBy) отреагировал Евгений Корепов за вопрос
Так и должно быть, sql сервер не знает что вы собираетесь хранить в таблице, какой язык именно будет использоваться для хранения, сортировки и т.п. Вы должны сами указать sql серверу как он должен обращаться с текстом. Для этого есть свойства Collation (ну и Character Set), обычно установить эти свойства можно глобально для сервера или конкретно для базы или таблицы. К сожалению не имел опыта работы именно с SQLite, но принцип везде один. При изменении этих свойств для наполненной данными таблицы будьте осторожны, с большой вероятностью русский язык переколбасит, так что сделайте бэкап. Параметры можно установить конкретно для языка, к примеру "CharacterSet=cp1251 -- Windows Cyrillic" "Collation=cp1251_general_ci", или более универсально "CharacterSet=utf8 -- UTF8 Unicode" "Collation=utf8_general_ci" - русский язык должен работать корректно.1 балл -
1 балл
-
Отправка данных по http в фоновом режиме
Равиль Зарипов (ZuBy) отреагировал Pax Beach за вопрос
Не надо вообще таймер делать для этого. И вообще, никогда таймеры не надо делать, когда можно без них обойтись. Вам в данной задаче надо работать по событиям. Каждый раз, когда пользователь сделал изменение в стринглисте, вы проверяете, прошло ли с момента последней отправки 15 секунд, а можно и без проверки. Далее вызов startService, с переданными в метод текстом. Сервис стартует с командой отправить переданный текст, отправляет его. Для этой задачи я бы использовал IntentService, а не LocalService — соответственно не startService, а bindService.1 балл -
Отправка данных по http в фоновом режиме
Равиль Зарипов (ZuBy) отреагировал Rusland за вопрос
Local-сервис для этого вполне подходит, главное сделать его перезапускаемым (Sticky). В разделе Сервис уже довольно много примеров, стоит их посмотреть. К сожалению, заряд батареи действительно будет быстро таять. Может не стоит так часто дергать сеть? PS. С помощью монитора отслеживайте, выводя лог, или с помощью дебага действительно ли ваш сервис нормально запускается и работает (с TTimer точно не работает).1 балл -
1 балл
-
Как понять «нашел»? А Android Tools не дает скачать нужную версию SDK?1 балл
-
Отправка данных по http в фоновом режиме
M1shQa отреагировал Равиль Зарипов (ZuBy) за вопрос
полезно к прочтению1 балл -
Это некий вспомогательный класс, к примеру TEventManager, который хранит список событий в формате <СсылкаНаОбработчик, НеобходимаяЗадержкаПередВызовом>, Внутри класса молотит 1 таймер, обработчик которого проходит по списку и смотрит какие события необходимо вызвать и удалить из списка, или не удалять если нужна периодичность, а просто перенести НеобходимаяЗадержкаПередВызовом вперед. Когда нам надо создать событие мы делаем что-то типо EventManager.Add(OnAnoterTimer, 100);1 балл
-
FMX.PhoneDialer убивает приложение
Kitty отреагировал Brovin Yaroslav за вопрос
Не обратил внимание на андроид... Проверю позже.1 балл -
Верхний регистр для кирилицы
walexw отреагировал Andrey Efimov за вопрос
На форуме уже обсуждалась подобная проблема: Зависимость от регистра русских символов при использовании LIKE1 балл -
Таймер в сервисе
Равиль Зарипов (ZuBy) отреагировал Pax Beach за вопрос
Вот пример, в котором реализованы ваши задачи.1 балл