Вячеслав
-
Постов
127 -
Зарегистрирован
-
Посещение
-
Победитель дней
3
Активность репутации
-
Вячеслав получил реакцию от 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
-
Вячеслав получил реакцию от Ильдар в 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
-
Вячеслав отреагировална krapotkin в Задать область прокрутки TListBox
вместо невидимости попробуйте Height = 0
?
-
Вячеслав получил реакцию от 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
-
Вячеслав получил реакцию от Pax Beach в [Win] [FMX] Создать Bitmap, имея в памяти массив Byte
Все, окончательно осознал механизм работы, теперь все стало на свои места. Все дело в том, что моя камера выдает данные в формате AARRGGBB, только вот значение старших двух бит равно $00, а не $FF. Поэтому картинка и воспринимается прозрачной для TImage. В итоге пробежался в цикле по памяти, поменял нули на $FF и все заработало.
-
Вячеслав получил реакцию от Евгений Корепов в 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
-
Вячеслав получил реакцию от 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
-
Вячеслав получил реакцию от 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
-
Вячеслав отреагировална Равиль Зарипов (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
-
Вячеслав отреагировална Brovin Yaroslav в Обновление форума
Я понял, постараюсь сделать такой же блок, который был в предыдущей версии форума.
-
Вячеслав отреагировална masmat в Как запустить приложение ВКонтакте из своего приложения?
Всем привет. Есть задача:
Из моего приложения необходимо открыть группу ВКонтакте зная ее WEB адрес.
Но! Открыть группу нужно в установленном на смартфоне приложении ВКонтакте, т.е. его нужно найти и открыть в нем группу, соответственно запустив приложение ВКонтакте.
Если приложение не установлено, то нужно выдать сообщение об ошибке.
-
Вячеслав получил реакцию от Pavel M в [Android] Что использовать для сохранения настроек приложения?
SaveState вам в помощь. А вообще сперва лучше пользуйтесь поиском, это не сложно.
-
Вячеслав получил реакцию от Alex7wrt в Как отработать событие OnClick по TMediaPlayerControl, Windows
Я бился над этим в своё время, в итоге забил и сделал просто кликабельную панель сбоку от этого компонента.
-
Вячеслав отреагировална Brovin Yaroslav в [TfgRichEdit]- компонент редактирования текста с поддержкой форматирования
Пока не знаю. Недавно оптимизировал скорость отрисовки. Теперь у меня документ занимает в ~2 раз меньше узлов дерева, чем до оптимизации. Сейчас работаю над оптимизацией плавной прокрутки на мобильных платформах.
-
Вячеслав отреагировална Brovin Yaroslav в [Sensomusic] Среда модуляции звука
Официальный сайт: http://www.sensomusic.org/ Автор: Sensomusic Ссылки на приложение: http://www.sensomusic.org/download.php
-
Вячеслав отреагировална AngryOwl в Поздравляю всех с Новым Годом!
Друзья!
Поздравляю вас всех с Новым Годом!
Желаю всем вам здоровья, счатья и благополучия в наступившем 2016 году!
Пожелаю всем нам успехов в наших делах, проектах, разработках!
Чтобы все у нас с вами сложилось)
Отдельно хочу поздравить Бровина Ярослава и Ефимова Андрея!
Пожелать Вам, ребята, и Вашим близким, успехов и благополучия!
Еще раз - с Новым Годом!
p.s. Надеюсь не забанят за то, что "не в тему" )))
-
Вячеслав отреагировална rustam_d в FGX - Donate - QIWI
Ярослав,
дабы отблагодарить за работу по компонентам предлагаю вам сделать кошелек QIWI.
и обязательно указать его в разделе описания версий.
Время на создание у вас займет 1 минуту, а радости гораздо больше будет )).
Donate вещь бескорыстная и не накладывает на вас обязательства...но хоть какая-то мотивация.
-
Вячеслав получил реакцию от Rusland в [Win] [FMX] Создать Bitmap, имея в памяти массив Byte
Все, окончательно осознал механизм работы, теперь все стало на свои места. Все дело в том, что моя камера выдает данные в формате AARRGGBB, только вот значение старших двух бит равно $00, а не $FF. Поэтому картинка и воспринимается прозрачной для TImage. В итоге пробежался в цикле по памяти, поменял нули на $FF и все заработало.
-
Вячеслав отреагировална AngryOwl в Поворот стрелки как на часах
Елки зеленые... Не подумал)
вот исправлено на стандартный TImage
SampleClock.zip
-
Вячеслав отреагировална AngryOwl в Поворот стрелки как на часах
вдогонку, кому интересно
SampleCPUUsage.zip
-
Вячеслав получил реакцию от 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
-
Вячеслав получил реакцию от enatechno в [Win] [FMX] Создать Bitmap, имея в памяти массив Byte
Все, окончательно осознал механизм работы, теперь все стало на свои места. Все дело в том, что моя камера выдает данные в формате AARRGGBB, только вот значение старших двух бит равно $00, а не $FF. Поэтому картинка и воспринимается прозрачной для TImage. В итоге пробежался в цикле по памяти, поменял нули на $FF и все заработало.
-
Вячеслав отреагировална 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.
-
Вячеслав отреагировална Равиль Зарипов (ZuBy) в [Win] [FMX] Создать Bitmap, имея в памяти массив Byte
Почитайте про TBitmap.Map/UnMap
-
Вячеслав отреагировална Brovin Yaroslav в [Win] [FMX] Создать Bitmap, имея в памяти массив Byte
Еще есть специальный класс для работы с буфером изображения TBitmapSurface. Вы можете указать требуемые параметры и загрузить в него ваш буфер. Конвертация TBitmapSurface <-> TBitmap идет через метод Assign.
Bitmap.Assign(BitmapSurface)