Печать растрового изображения с помощью термопринтера Bluetooth с помощью Firemonkey AndroidAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Печать растрового изображения с помощью термопринтера Bluetooth с помощью Firemonkey Android

Сообщение Anonymous »

У меня есть этот код для печати текста на термопринтере Bluetooth с использованием Android с использованием Firemonkey Delphi,
мой друг модифицировал для печати растрового изображения, но возникла какая-то ошибка, нарушение доступа к процедуре bitmaptostr.

Код: Выделить всё

procedure TBluetoothPrinter.Send(Data: TArray);
begin
if Data = nil then
Exit; // nothing to write

Check(OutputStream  nil, 'Cannot retrieve output stream');
OutputStream.write(ToJavaByteArray(Data));
end;

procedure Printing(sText: string);
begin
with TBluetoothPrinter.Create do
begin
Send(TEncoding.ANSI.GetBytes(sText + CRLF));
end;
end;

function BitmapToStr(BMP: TBitmap; EscapeStr:String; SliceEscapeStr:String; BitsSlice: Byte = 8):String;
var
BMPData: TBitmapData;
AColor: TAlphaColor;

nCol, nRow, nIndex: integer;
nOffset, nBytePos, nBitPos: integer;
nSliceIndex, nLum: integer;
nSlice, nBit, nTmpBit, BytesSlice: byte;
ADots: Array of boolean;
sSlice: String;
begin
try
SetLength(ADots, (BMP.Height * BMP.Width));
nIndex := 0;

for nRow := 0 to BMP.Height-1 do
begin
for nCol := 0 to BMP.Width-1 do
begin
AColor := BMPData.GetPixel(nCol, nRow);
nLum := Trunc((TAlphaColorRec(AColor).R * 0.3)  + (TAlphaColorRec(AColor).G * 0.59) + (TAlphaColorRec(AColor).B * 0.11));
ADots[nIndex] := (nLum < 127);
inc(nIndex);
end;
end;

BytesSlice := (BitsSlice div 8);

if BitsSlice mod 8 > 0 then
inc(BytesSlice);

Result := EscapeStr;
nOffset := 0;
while (nOffset < BMP.Height) do
begin
Result := Result + SliceEscapeStr;

for nCol := 0 to BMP.Width-1 do
begin
for nSliceIndex := 0 to BytesSlice - 1 do
begin
nSlice := 0;
for nBit := 0 to 7 do
begin
nBytePos := (((nOffset div 8) + nSliceIndex) * 8) + nBit;
nBitPos := (nBytePos * BMP.Width) + nCol;

nTmpBit := 0;
if (nBitPos < Length(ADots)) then
begin
if ADots[nBitPos] then
nTmpBit := 1
else
nTmpBit := 0;
end;
nSlice := nSlice or (nTmpBit shl (7 - nBit));
end;

Result := Result + Chr(nSlice);
end;
end;

inc(nOffset, BitsSlice);
Result := Result + CRLF;
end;
finally
ADots := nil;
end;
end;
у кого-нибудь есть решение или образец ссылки?

Подробнее здесь: https://stackoverflow.com/questions/576 ... ey-android
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»