Сначала я инициализирую принтер (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
и как я могу преобразовать его в правильный тип данных?Как правильно получить растровую информацию для печати?