Это будет сложно.
Если вы можете декодировать этот QR с помощью считывателя (я пробовал, но не получилось), можно перекодировать его с помощью устройства записи. Но нет никакой гарантии, что писатель будет воссоздавать то же самое, так как возможны разные варианты кодирования.
Если ваша цель на самом деле - иметь возможность декодировать, вы застряли. Расшифровка «вручную» может быть возможной, но она длительная и сложная. Вы также можете рассмотреть возможность перерисовки кода вручную на идеальной сетке и передать его читателю.
Вы не должны использовать Читаемый () как этот. Попробуйте следующее вместо этого:
procedure TFormMain.IdTCPServerExecute(AContext: TIdContext);
var
RxBuf: TIdBytes;
begin
RxBuf := nil;
with AContext.Connection.IOHandler do
begin
CheckForDataOnSource(10);
if not InputBufferIsEmpty then
begin
InputBuffer.ExtractToBytes(RxBuf);
// process RxBuf as needed...
end;
end;
end;
Кроме того:
procedure TFormMain.IdTCPServerExecute(AContext: TIdContext);
var
RxBufStr: String; // not UTF8String
begin
with AContext.Connection.IOHandler do
begin
CheckForDataOnSource(10);
if not InputBufferIsEmpty then
begin
RxBufStr := InputBuffer.Extract(-1, enUtf8);
// Alternatively to above, you can set the
// InputBuffer.Encoding property to enUtf8
// beforehand, and then call TIdBuffer.Extract()
// without any parameters.
//
// Or, set the IOHandler.DefStringEncoding
// property to enUtf8 beforehand, and then
// call TIdIOHandler.InputBufferAsString()
// process RxBufStr as needed...
end;
end;
end;
Что касается TIdSchedulerOfFiber - пакет SuperCore эффективно мертв в это время. Это не работалось на в очень долгое время и не актуально с последней Инди 10 архитектуры. Мы можем попытаться возродить его позднее, но это не находится в наших планах относительно ближайшего будущего.