Как получить данные изображения для печати на термопринтере с помощью ESC / POS? - PullRequest
0 голосов
/ 07 декабря 2018

Сначала я инициализирую принтер (ESC @):

addBytesCommand(Data(bytes: [0x1B, 0x40]))

Затем я устанавливаю количество перевода строки (ESC 3 n):

addBytesCommand(Data(bytes: [0x1B, 0x33, 24]))

Затем я пытаюсь использовать(ESC *) команда для печати изображения:

addBytesCommand(Data(bytes: [0x1B, 0x2A, 33]))

let image = #imageLiteral(resourceName: "icon_circle_remove_filled")
let imageWidth = image.size.width
let lowByte = UInt8(Int(imageWidth) & 0x00ff)
let highByte = UInt8((Int(imageWidth) & 0xff00) >> 8)

addBytesCommand(Data(bytes: [lowByte, highByte]))

Логика для lowByte и highByte Я использовал из этого объяснения: ESC / POS Image Printing .После этого я пытаюсь получить данные изображения для отправки на принтер, используя это расширение для UIImage.

extension UIImage {
func pixelData() -> [UInt8]? {
    guard let cgImage = self.cgImage else { return nil }

    let size = self.size
    let bitsPerPixel = UInt8(cgImage.bitsPerPixel)
    let bitsPerComponent = cgImage.bitsPerComponent
    let bytesPerRow = cgImage.bytesPerRow

    let dataSize = bytesPerRow * cgImage.height
    var pixelData = [UInt8](repeating: 0, count: dataSize)
    let colorSpace = CGColorSpaceCreateDeviceGray()
    let context = CGContext(data: &pixelData,
                            width: Int(size.width),
                            height: Int(size.height),
                            bitsPerComponent: bitsPerComponent,
                            bytesPerRow: bytesPerRow,
                            space: colorSpace,
                            bitmapInfo: CGImageAlphaInfo.alphaOnly.rawValue)
    context?.draw(cgImage, in: CGRect(x: 0, y: 0, width: size.width, height: size.height))

    return pixelData
}

И вот тут у меня проблемы.Я не понимаю, что именно содержит pixelData и как я могу преобразовать его в правильный тип данных?Как правильно получить растровую информацию для печати?

...