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

Вячеслав

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

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

  • Посещение

  • Победитель дней

    3

Активность репутации

  1. Like
    Вячеслав получил реакцию от Ingalime в com-порт FireMonkey   
    Авторство всецело не мое, только правки вносил, т.к. в разных версиях студии код вел себя по-разному. 
    Прощу прощения за то, что выкладываю в неудобной форме, просто из моего проекта сейчас это будет уже достаточно проблематично вытащить.
     
    Код для использования:
    На форме лежат Мемо, кнопки открытия/закрытия, эдит для отправляемых текстов и кнопка отправить. в паблике у формы добавляем объект GPort: TComPort; // ****************************************************************************** // ПРОЦЕДУРЫ РАБОТЫ С COM ПОРТОМ // открываем порт procedure TFormChannels.OpenPort(PortNum: Byte); begin GPort := TComPort.Create(PortNum, br9600); GPort.OnRead := FormChannels.OnRead; GFlagOpen := true; FormChannels.ButtonClosePort.Enabled := true; end; // закрываем порт procedure TFormChannels.ClosePort; begin GPort.Free; end; // отправляем в порт данные procedure TFormChannels.WritePort(strWrite: string); var arrBytes: array of Byte; i: Integer; begin if GFlagOpen = False then // проверяем, открыт ли порт OpenPort(strtoint(edtPort.Text)); // если нет, то открываем SetLength(arrBytes, Length(strWrite)); for i := Low(arrBytes) to High(arrBytes) do arrBytes[i] := Ord(strWrite[i + 1]); GPort.Write(arrBytes); arrBytes := nil; end; // читаем данные из порта procedure TFormChannels.OnRead(Sender: TObject; ReadBytes: array of Byte); var i: Integer; begin memRead1.Lines.BeginUpdate; for i := Low(ReadBytes) to High(ReadBytes) do begin if i > Low(ReadBytes) then memRead1.Text := memRead1.Text; // + '.'; memRead1.Text := memRead1.Text + char(ReadBytes[i]); end; // подчищаем заполняющийся Мемо if memRead1.Lines.Count > 5 then begin // memRead1.Clear; memRead1.Lines.Delete(0); memRead1.Lines.Delete(1); end; memRead1.Lines.EndUpdate; end; procedure TFormChannels.ButtonClosePortClick(Sender: TObject); begin ClosePort; end; // открываем порт кнопкой procedure TFormChannels.ButtonOpenPortClick(Sender: TObject); begin OpenPort(strtoint(edtPort.Text)); end; // отправляем в порт данные кнопкой procedure TFormChannels.btnWriteClick(Sender: TObject); begin WritePort(FormChannels.edtWrite.Text); end; // КОНЕЦ ПРОЦЕДУР РАБОТЫ С COM ПОРТОМ // ****************************************************************************** ComPort.zip
  2. Like
    Вячеслав получил реакцию от Ильдар в com-порт FireMonkey   
    Авторство всецело не мое, только правки вносил, т.к. в разных версиях студии код вел себя по-разному. 
    Прощу прощения за то, что выкладываю в неудобной форме, просто из моего проекта сейчас это будет уже достаточно проблематично вытащить.
     
    Код для использования:
    На форме лежат Мемо, кнопки открытия/закрытия, эдит для отправляемых текстов и кнопка отправить. в паблике у формы добавляем объект GPort: TComPort; // ****************************************************************************** // ПРОЦЕДУРЫ РАБОТЫ С COM ПОРТОМ // открываем порт procedure TFormChannels.OpenPort(PortNum: Byte); begin GPort := TComPort.Create(PortNum, br9600); GPort.OnRead := FormChannels.OnRead; GFlagOpen := true; FormChannels.ButtonClosePort.Enabled := true; end; // закрываем порт procedure TFormChannels.ClosePort; begin GPort.Free; end; // отправляем в порт данные procedure TFormChannels.WritePort(strWrite: string); var arrBytes: array of Byte; i: Integer; begin if GFlagOpen = False then // проверяем, открыт ли порт OpenPort(strtoint(edtPort.Text)); // если нет, то открываем SetLength(arrBytes, Length(strWrite)); for i := Low(arrBytes) to High(arrBytes) do arrBytes[i] := Ord(strWrite[i + 1]); GPort.Write(arrBytes); arrBytes := nil; end; // читаем данные из порта procedure TFormChannels.OnRead(Sender: TObject; ReadBytes: array of Byte); var i: Integer; begin memRead1.Lines.BeginUpdate; for i := Low(ReadBytes) to High(ReadBytes) do begin if i > Low(ReadBytes) then memRead1.Text := memRead1.Text; // + '.'; memRead1.Text := memRead1.Text + char(ReadBytes[i]); end; // подчищаем заполняющийся Мемо if memRead1.Lines.Count > 5 then begin // memRead1.Clear; memRead1.Lines.Delete(0); memRead1.Lines.Delete(1); end; memRead1.Lines.EndUpdate; end; procedure TFormChannels.ButtonClosePortClick(Sender: TObject); begin ClosePort; end; // открываем порт кнопкой procedure TFormChannels.ButtonOpenPortClick(Sender: TObject); begin OpenPort(strtoint(edtPort.Text)); end; // отправляем в порт данные кнопкой procedure TFormChannels.btnWriteClick(Sender: TObject); begin WritePort(FormChannels.edtWrite.Text); end; // КОНЕЦ ПРОЦЕДУР РАБОТЫ С COM ПОРТОМ // ****************************************************************************** ComPort.zip
  3. Thanks
    Вячеслав отреагировална krapotkin в Задать область прокрутки TListBox   
    вместо невидимости попробуйте Height = 0 
    ?
  4. Like
    Вячеслав получил реакцию от dnekrasov в com-порт FireMonkey   
    Авторство всецело не мое, только правки вносил, т.к. в разных версиях студии код вел себя по-разному. 
    Прощу прощения за то, что выкладываю в неудобной форме, просто из моего проекта сейчас это будет уже достаточно проблематично вытащить.
     
    Код для использования:
    На форме лежат Мемо, кнопки открытия/закрытия, эдит для отправляемых текстов и кнопка отправить. в паблике у формы добавляем объект GPort: TComPort; // ****************************************************************************** // ПРОЦЕДУРЫ РАБОТЫ С COM ПОРТОМ // открываем порт procedure TFormChannels.OpenPort(PortNum: Byte); begin GPort := TComPort.Create(PortNum, br9600); GPort.OnRead := FormChannels.OnRead; GFlagOpen := true; FormChannels.ButtonClosePort.Enabled := true; end; // закрываем порт procedure TFormChannels.ClosePort; begin GPort.Free; end; // отправляем в порт данные procedure TFormChannels.WritePort(strWrite: string); var arrBytes: array of Byte; i: Integer; begin if GFlagOpen = False then // проверяем, открыт ли порт OpenPort(strtoint(edtPort.Text)); // если нет, то открываем SetLength(arrBytes, Length(strWrite)); for i := Low(arrBytes) to High(arrBytes) do arrBytes[i] := Ord(strWrite[i + 1]); GPort.Write(arrBytes); arrBytes := nil; end; // читаем данные из порта procedure TFormChannels.OnRead(Sender: TObject; ReadBytes: array of Byte); var i: Integer; begin memRead1.Lines.BeginUpdate; for i := Low(ReadBytes) to High(ReadBytes) do begin if i > Low(ReadBytes) then memRead1.Text := memRead1.Text; // + '.'; memRead1.Text := memRead1.Text + char(ReadBytes[i]); end; // подчищаем заполняющийся Мемо if memRead1.Lines.Count > 5 then begin // memRead1.Clear; memRead1.Lines.Delete(0); memRead1.Lines.Delete(1); end; memRead1.Lines.EndUpdate; end; procedure TFormChannels.ButtonClosePortClick(Sender: TObject); begin ClosePort; end; // открываем порт кнопкой procedure TFormChannels.ButtonOpenPortClick(Sender: TObject); begin OpenPort(strtoint(edtPort.Text)); end; // отправляем в порт данные кнопкой procedure TFormChannels.btnWriteClick(Sender: TObject); begin WritePort(FormChannels.edtWrite.Text); end; // КОНЕЦ ПРОЦЕДУР РАБОТЫ С COM ПОРТОМ // ****************************************************************************** ComPort.zip
  5. Like
    Вячеслав получил реакцию от Pax Beach в [Win] [FMX] Создать Bitmap, имея в памяти массив Byte   
    Все, окончательно осознал механизм работы, теперь все стало на свои места. Все дело в том, что моя камера выдает данные в формате AARRGGBB, только вот значение старших двух бит равно $00, а не $FF. Поэтому картинка и воспринимается прозрачной для TImage. В итоге пробежался в цикле по памяти, поменял нули на $FF и все заработало. 
  6. Like
    Вячеслав получил реакцию от Евгений Корепов в com-порт FireMonkey   
    Авторство всецело не мое, только правки вносил, т.к. в разных версиях студии код вел себя по-разному. 
    Прощу прощения за то, что выкладываю в неудобной форме, просто из моего проекта сейчас это будет уже достаточно проблематично вытащить.
     
    Код для использования:
    На форме лежат Мемо, кнопки открытия/закрытия, эдит для отправляемых текстов и кнопка отправить. в паблике у формы добавляем объект GPort: TComPort; // ****************************************************************************** // ПРОЦЕДУРЫ РАБОТЫ С COM ПОРТОМ // открываем порт procedure TFormChannels.OpenPort(PortNum: Byte); begin GPort := TComPort.Create(PortNum, br9600); GPort.OnRead := FormChannels.OnRead; GFlagOpen := true; FormChannels.ButtonClosePort.Enabled := true; end; // закрываем порт procedure TFormChannels.ClosePort; begin GPort.Free; end; // отправляем в порт данные procedure TFormChannels.WritePort(strWrite: string); var arrBytes: array of Byte; i: Integer; begin if GFlagOpen = False then // проверяем, открыт ли порт OpenPort(strtoint(edtPort.Text)); // если нет, то открываем SetLength(arrBytes, Length(strWrite)); for i := Low(arrBytes) to High(arrBytes) do arrBytes[i] := Ord(strWrite[i + 1]); GPort.Write(arrBytes); arrBytes := nil; end; // читаем данные из порта procedure TFormChannels.OnRead(Sender: TObject; ReadBytes: array of Byte); var i: Integer; begin memRead1.Lines.BeginUpdate; for i := Low(ReadBytes) to High(ReadBytes) do begin if i > Low(ReadBytes) then memRead1.Text := memRead1.Text; // + '.'; memRead1.Text := memRead1.Text + char(ReadBytes[i]); end; // подчищаем заполняющийся Мемо if memRead1.Lines.Count > 5 then begin // memRead1.Clear; memRead1.Lines.Delete(0); memRead1.Lines.Delete(1); end; memRead1.Lines.EndUpdate; end; procedure TFormChannels.ButtonClosePortClick(Sender: TObject); begin ClosePort; end; // открываем порт кнопкой procedure TFormChannels.ButtonOpenPortClick(Sender: TObject); begin OpenPort(strtoint(edtPort.Text)); end; // отправляем в порт данные кнопкой procedure TFormChannels.btnWriteClick(Sender: TObject); begin WritePort(FormChannels.edtWrite.Text); end; // КОНЕЦ ПРОЦЕДУР РАБОТЫ С COM ПОРТОМ // ****************************************************************************** ComPort.zip
  7. Like
    Вячеслав получил реакцию от Zawuza в com-порт FireMonkey   
    Авторство всецело не мое, только правки вносил, т.к. в разных версиях студии код вел себя по-разному. 
    Прощу прощения за то, что выкладываю в неудобной форме, просто из моего проекта сейчас это будет уже достаточно проблематично вытащить.
     
    Код для использования:
    На форме лежат Мемо, кнопки открытия/закрытия, эдит для отправляемых текстов и кнопка отправить. в паблике у формы добавляем объект GPort: TComPort; // ****************************************************************************** // ПРОЦЕДУРЫ РАБОТЫ С COM ПОРТОМ // открываем порт procedure TFormChannels.OpenPort(PortNum: Byte); begin GPort := TComPort.Create(PortNum, br9600); GPort.OnRead := FormChannels.OnRead; GFlagOpen := true; FormChannels.ButtonClosePort.Enabled := true; end; // закрываем порт procedure TFormChannels.ClosePort; begin GPort.Free; end; // отправляем в порт данные procedure TFormChannels.WritePort(strWrite: string); var arrBytes: array of Byte; i: Integer; begin if GFlagOpen = False then // проверяем, открыт ли порт OpenPort(strtoint(edtPort.Text)); // если нет, то открываем SetLength(arrBytes, Length(strWrite)); for i := Low(arrBytes) to High(arrBytes) do arrBytes[i] := Ord(strWrite[i + 1]); GPort.Write(arrBytes); arrBytes := nil; end; // читаем данные из порта procedure TFormChannels.OnRead(Sender: TObject; ReadBytes: array of Byte); var i: Integer; begin memRead1.Lines.BeginUpdate; for i := Low(ReadBytes) to High(ReadBytes) do begin if i > Low(ReadBytes) then memRead1.Text := memRead1.Text; // + '.'; memRead1.Text := memRead1.Text + char(ReadBytes[i]); end; // подчищаем заполняющийся Мемо if memRead1.Lines.Count > 5 then begin // memRead1.Clear; memRead1.Lines.Delete(0); memRead1.Lines.Delete(1); end; memRead1.Lines.EndUpdate; end; procedure TFormChannels.ButtonClosePortClick(Sender: TObject); begin ClosePort; end; // открываем порт кнопкой procedure TFormChannels.ButtonOpenPortClick(Sender: TObject); begin OpenPort(strtoint(edtPort.Text)); end; // отправляем в порт данные кнопкой procedure TFormChannels.btnWriteClick(Sender: TObject); begin WritePort(FormChannels.edtWrite.Text); end; // КОНЕЦ ПРОЦЕДУР РАБОТЫ С COM ПОРТОМ // ****************************************************************************** ComPort.zip
  8. Like
    Вячеслав получил реакцию от DrunyaRuma в com-порт FireMonkey   
    Авторство всецело не мое, только правки вносил, т.к. в разных версиях студии код вел себя по-разному. 
    Прощу прощения за то, что выкладываю в неудобной форме, просто из моего проекта сейчас это будет уже достаточно проблематично вытащить.
     
    Код для использования:
    На форме лежат Мемо, кнопки открытия/закрытия, эдит для отправляемых текстов и кнопка отправить. в паблике у формы добавляем объект GPort: TComPort; // ****************************************************************************** // ПРОЦЕДУРЫ РАБОТЫ С COM ПОРТОМ // открываем порт procedure TFormChannels.OpenPort(PortNum: Byte); begin GPort := TComPort.Create(PortNum, br9600); GPort.OnRead := FormChannels.OnRead; GFlagOpen := true; FormChannels.ButtonClosePort.Enabled := true; end; // закрываем порт procedure TFormChannels.ClosePort; begin GPort.Free; end; // отправляем в порт данные procedure TFormChannels.WritePort(strWrite: string); var arrBytes: array of Byte; i: Integer; begin if GFlagOpen = False then // проверяем, открыт ли порт OpenPort(strtoint(edtPort.Text)); // если нет, то открываем SetLength(arrBytes, Length(strWrite)); for i := Low(arrBytes) to High(arrBytes) do arrBytes[i] := Ord(strWrite[i + 1]); GPort.Write(arrBytes); arrBytes := nil; end; // читаем данные из порта procedure TFormChannels.OnRead(Sender: TObject; ReadBytes: array of Byte); var i: Integer; begin memRead1.Lines.BeginUpdate; for i := Low(ReadBytes) to High(ReadBytes) do begin if i > Low(ReadBytes) then memRead1.Text := memRead1.Text; // + '.'; memRead1.Text := memRead1.Text + char(ReadBytes[i]); end; // подчищаем заполняющийся Мемо if memRead1.Lines.Count > 5 then begin // memRead1.Clear; memRead1.Lines.Delete(0); memRead1.Lines.Delete(1); end; memRead1.Lines.EndUpdate; end; procedure TFormChannels.ButtonClosePortClick(Sender: TObject); begin ClosePort; end; // открываем порт кнопкой procedure TFormChannels.ButtonOpenPortClick(Sender: TObject); begin OpenPort(strtoint(edtPort.Text)); end; // отправляем в порт данные кнопкой procedure TFormChannels.btnWriteClick(Sender: TObject); begin WritePort(FormChannels.edtWrite.Text); end; // КОНЕЦ ПРОЦЕДУР РАБОТЫ С COM ПОРТОМ // ****************************************************************************** ComPort.zip
  9. Like
    Вячеслав отреагировална Равиль Зарипов (ZuBy) в Custom Font   
    Шаблон проекта с кастомным шрифтом FontAwesome
    Намного удобней и менее затратно использовать Шрифт с Иконками, чем заботиться о качестве картинок, скейлах, их хранении и загрузке
    Поэтому давно перешел на шрифты, пару скриншотов (без использования картинок)

    Seattle CustomFont.7z
    Berlin CustomFont(Berlin).zip
     
    WINDOWS/MACOS - установить шрифт в систему
    IOS - в деплой добавить шрифт и с помощью IOS9Fix прописать в .plist следующее:
    ANDROID - в деплой добавить шрифт (Remote Path -> assets\internal) и подключить к проекту измененные файлы FMX.FontGlyphs.Android.pas, FMX.FontGlyphs.pas
  10. Like
    Вячеслав отреагировална Brovin Yaroslav в Обновление форума   
    Я понял, постараюсь сделать такой же блок, который был в предыдущей версии форума.
  11. Like
    Вячеслав отреагировална masmat в Как запустить приложение ВКонтакте из своего приложения?   
    Всем привет. Есть задача:
     
    Из моего приложения необходимо открыть группу ВКонтакте зная ее WEB адрес.
     
    Но! Открыть группу нужно в установленном на смартфоне приложении ВКонтакте, т.е. его нужно найти и открыть в нем группу, соответственно запустив приложение ВКонтакте.
    Если приложение не установлено, то нужно выдать сообщение об ошибке.
     
  12. Like
    Вячеслав получил реакцию от Pavel M в [Android] Что использовать для сохранения настроек приложения?   
    SaveState вам в помощь. А вообще сперва лучше пользуйтесь поиском, это не сложно.
  13. Like
    Вячеслав получил реакцию от Alex7wrt в Как отработать событие OnClick по TMediaPlayerControl, Windows   
    Я бился над этим в своё время, в итоге забил и сделал просто кликабельную панель сбоку от этого компонента.
  14. Like
    Вячеслав отреагировална Brovin Yaroslav в [TfgRichEdit]- компонент редактирования текста с поддержкой форматирования   
    Пока не знаю. Недавно оптимизировал скорость отрисовки. Теперь у меня документ занимает в ~2 раз меньше узлов дерева, чем до оптимизации. Сейчас работаю над оптимизацией плавной прокрутки на мобильных платформах. 
  15. Like
    Вячеслав отреагировална Brovin Yaroslav в [Sensomusic] Среда модуляции звука   
    Официальный сайт: http://www.sensomusic.org/ Автор: Sensomusic Ссылки на приложение: http://www.sensomusic.org/download.php  

  16. Like
    Вячеслав отреагировална AngryOwl в Поздравляю всех с Новым Годом!   
    Друзья!
    Поздравляю вас всех с Новым Годом!
    Желаю всем вам здоровья, счатья и благополучия в наступившем 2016 году!
    Пожелаю всем нам успехов в наших делах, проектах, разработках!
    Чтобы все у нас с вами сложилось)
     
    Отдельно хочу поздравить Бровина Ярослава и Ефимова Андрея!
    Пожелать Вам, ребята, и Вашим близким, успехов и благополучия!
     
    Еще раз - с Новым Годом!
     
    p.s. Надеюсь не забанят за то, что "не в тему" )))
  17. Like
    Вячеслав отреагировална rustam_d в FGX - Donate - QIWI   
    Ярослав,
    дабы отблагодарить за работу по компонентам предлагаю вам сделать кошелек QIWI. 
    и обязательно указать его в разделе описания версий.
     
    Время на создание у вас займет 1 минуту, а радости гораздо больше будет )).
    Donate вещь бескорыстная и не накладывает на вас обязательства...но хоть какая-то мотивация.
     
  18. Like
    Вячеслав получил реакцию от Rusland в [Win] [FMX] Создать Bitmap, имея в памяти массив Byte   
    Все, окончательно осознал механизм работы, теперь все стало на свои места. Все дело в том, что моя камера выдает данные в формате AARRGGBB, только вот значение старших двух бит равно $00, а не $FF. Поэтому картинка и воспринимается прозрачной для TImage. В итоге пробежался в цикле по памяти, поменял нули на $FF и все заработало. 
  19. Like
    Вячеслав отреагировална AngryOwl в Поворот стрелки как на часах   
    Елки зеленые... Не подумал)
    вот исправлено на стандартный TImage
    SampleClock.zip
  20. Like
    Вячеслав отреагировална AngryOwl в Поворот стрелки как на часах   
    вдогонку, кому интересно

    SampleCPUUsage.zip
  21. Like
    Вячеслав получил реакцию от Rusland в com-порт FireMonkey   
    Авторство всецело не мое, только правки вносил, т.к. в разных версиях студии код вел себя по-разному. 
    Прощу прощения за то, что выкладываю в неудобной форме, просто из моего проекта сейчас это будет уже достаточно проблематично вытащить.
     
    Код для использования:
    На форме лежат Мемо, кнопки открытия/закрытия, эдит для отправляемых текстов и кнопка отправить. в паблике у формы добавляем объект GPort: TComPort; // ****************************************************************************** // ПРОЦЕДУРЫ РАБОТЫ С COM ПОРТОМ // открываем порт procedure TFormChannels.OpenPort(PortNum: Byte); begin GPort := TComPort.Create(PortNum, br9600); GPort.OnRead := FormChannels.OnRead; GFlagOpen := true; FormChannels.ButtonClosePort.Enabled := true; end; // закрываем порт procedure TFormChannels.ClosePort; begin GPort.Free; end; // отправляем в порт данные procedure TFormChannels.WritePort(strWrite: string); var arrBytes: array of Byte; i: Integer; begin if GFlagOpen = False then // проверяем, открыт ли порт OpenPort(strtoint(edtPort.Text)); // если нет, то открываем SetLength(arrBytes, Length(strWrite)); for i := Low(arrBytes) to High(arrBytes) do arrBytes[i] := Ord(strWrite[i + 1]); GPort.Write(arrBytes); arrBytes := nil; end; // читаем данные из порта procedure TFormChannels.OnRead(Sender: TObject; ReadBytes: array of Byte); var i: Integer; begin memRead1.Lines.BeginUpdate; for i := Low(ReadBytes) to High(ReadBytes) do begin if i > Low(ReadBytes) then memRead1.Text := memRead1.Text; // + '.'; memRead1.Text := memRead1.Text + char(ReadBytes[i]); end; // подчищаем заполняющийся Мемо if memRead1.Lines.Count > 5 then begin // memRead1.Clear; memRead1.Lines.Delete(0); memRead1.Lines.Delete(1); end; memRead1.Lines.EndUpdate; end; procedure TFormChannels.ButtonClosePortClick(Sender: TObject); begin ClosePort; end; // открываем порт кнопкой procedure TFormChannels.ButtonOpenPortClick(Sender: TObject); begin OpenPort(strtoint(edtPort.Text)); end; // отправляем в порт данные кнопкой procedure TFormChannels.btnWriteClick(Sender: TObject); begin WritePort(FormChannels.edtWrite.Text); end; // КОНЕЦ ПРОЦЕДУР РАБОТЫ С COM ПОРТОМ // ****************************************************************************** ComPort.zip
  22. Like
    Вячеслав получил реакцию от enatechno в [Win] [FMX] Создать Bitmap, имея в памяти массив Byte   
    Все, окончательно осознал механизм работы, теперь все стало на свои места. Все дело в том, что моя камера выдает данные в формате AARRGGBB, только вот значение старших двух бит равно $00, а не $FF. Поэтому картинка и воспринимается прозрачной для TImage. В итоге пробежался в цикле по памяти, поменял нули на $FF и все заработало. 
  23. Like
    Вячеслав отреагировална enatechno в [Win] [FMX] Создать Bitmap, имея в памяти массив Byte   
    Как Вы работали с потоком? Использовали TBitmapCodecManager.SaveToStream и указывали расширение .bmp?
    У меня такой код правильно отображает Ваш тестовый test3FMX.bmp:
    procedure TFormMulticam.Button1Click(Sender: TObject); var bmp: FMX.Graphics.TBitmap; aSurf: TBitmapSurface; aMemStream: TMemoryStream; begin bmp := GCameraArray[0].GetFMXBitmap; aMemStream := TMemoryStream.Create(); try aSurf := TBitmapSurface.Create(); try aSurf.Assign(bmp); TBitmapCodecManager.SaveToStream(aMemStream, aSurf, '.bmp'); Image1.Bitmap.LoadFromStream(aMemStream); finally FreeAndNil(aSurf); end; finally FreeAndNil(aMemStream); end; //Image1.Bitmap.Assign(bmp); bmp.Free; end; Пока не указано явно, что TBitmap имеет формат BMP, TImage в FMX работает с ним как с PNG.
  24. Like
    Вячеслав отреагировална Равиль Зарипов (ZuBy) в [Win] [FMX] Создать Bitmap, имея в памяти массив Byte   
    Почитайте про TBitmap.Map/UnMap
  25. Like
    Вячеслав отреагировална Brovin Yaroslav в [Win] [FMX] Создать Bitmap, имея в памяти массив Byte   
    Еще есть специальный класс для работы с буфером изображения TBitmapSurface. Вы можете указать требуемые параметры и загрузить в него ваш буфер. Конвертация TBitmapSurface <-> TBitmap идет через метод Assign.
    Bitmap.Assign(BitmapSurface)
×
×
  • Создать...