2012-12-30 25 views
1

有幾個與P25mi動態打印圖像相關的未解答的問題,但都沒有被接受的答案。下面有幾條鏈接。如何將十六進制數組轉換爲UIImage?

How to convert image to bitmap code for bluetooth print in iphone

How to convert image into hexa decimal bytes array to send it to output stream in iOS sdk

下面的代碼樣品是硬編碼的工作實施例,打印的靜態圖像p25mi。數組中的前10個元素是p25的控制和格式化命令。

我認爲下面的十六進制陣列轉換成在一個UIImageView顯示一個UIImage可能棚上做反向的一些光。

如何確定下面代碼示例中表示圖像的高度,寬度和深度?

如何將下面的十六進制數組轉換爲UIImage?

unsigned char buffer3[796]={ 
    0x55 , 0x66 , 0x77 , 0x88 , 0x44 , 0x1B , 0x58 , 0x31 , 
    0x19, 0x20, 
    0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x01 ,0xC0 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x01 ,0x80 ,0x00 ,0x03 ,0x60 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 
    ,0xA0 ,0x00 ,0x07 ,0xB0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x05 ,0x60 ,0x00 ,0x07 ,0xD8 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x05 ,0xA0 ,0x00 ,0x13 ,0xEC ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x04 
    ,0x20 ,0x00 ,0x29 ,0xF4 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0xC0 ,0x00 ,0x64 ,0xF9 ,0x00 
    ,0x0F ,0xFF ,0x9C ,0x01 ,0xC0 ,0x19 ,0xFF ,0xC0 ,0x7F ,0xFC ,0x7F ,0xF9 ,0xC0 ,0x3D ,0xFF 
    ,0xF1 ,0xFF ,0xE3 ,0xFF ,0xC0 ,0x00 ,0x00 ,0xF2 ,0x73 ,0x80 ,0x0F ,0xFF ,0x9C ,0x01 ,0xC0 
    ,0x19 ,0xFF ,0xC0 ,0x7F ,0xFE ,0x7F ,0xFD ,0xE0 ,0x3D ,0xFF ,0xF1 ,0xFF ,0xE3 ,0xFF ,0xC0 
    ,0x00 ,0x00 ,0x79 ,0x26 ,0xC0 ,0x0F ,0xFF ,0xDC ,0x01 ,0xC0 ,0x19 ,0xFF ,0xC0 ,0x7F ,0xFE 
    ,0xFF ,0xFD ,0xF0 ,0x7D ,0xFF ,0xFB ,0xFF ,0xF7 ,0xFF ,0xE0 ,0x00 ,0x03 ,0x3C ,0x8F ,0x60 
    ,0x0C ,0x01 ,0xDC ,0x01 ,0xC0 ,0x19 ,0x80 ,0x00 ,0x70 ,0x0E ,0xE0 ,0x1D ,0xF0 ,0x7D ,0x80 
    ,0x3B ,0x80 ,0x77 ,0x00 ,0xE0 ,0x00 ,0x04 ,0x9E ,0x8F ,0xB0 ,0x0E ,0x01 ,0xDC ,0x01 ,0xC0 
    ,0x19 ,0x80 ,0x00 ,0x70 ,0x0E ,0xE0 ,0x1D ,0xF8 ,0xFD ,0x80 ,0x33 ,0x80 ,0x77 ,0x00 ,0xE0 
    ,0x00 ,0x0E ,0x4F ,0x27 ,0xD8 ,0x0F ,0xFF ,0x9C ,0x01 ,0xC0 ,0x19 ,0xFF ,0xC0 ,0x7F ,0xFC 
    ,0xE0 ,0x1D ,0xF9 ,0xFD ,0xFF ,0xF3 ,0x80 ,0x77 ,0x00 ,0xE0 ,0x00 ,0x0F ,0x26 ,0x53 ,0xC8 
    ,0x0F ,0xFF ,0x9C ,0x01 ,0xC0 ,0x19 ,0xFF ,0xC0 ,0x7F ,0xFC ,0xEF ,0xFD ,0xDD ,0xDD ,0xFF 
    ,0xF3 ,0x80 ,0x77 ,0x00 ,0xE0 ,0x00 ,0x07 ,0x90 ,0xC9 ,0xF0 ,0x0F ,0xFF ,0xDC ,0x01 ,0xC0 
    ,0x19 ,0xFF ,0xC0 ,0x7F ,0xFE ,0xEF ,0xFD ,0xDF ,0x9D ,0xFF ,0xFB ,0x80 ,0x77 ,0x00 ,0xE0 
    ,0x00 ,0x03 ,0xC9 ,0xE4 ,0xE0 ,0x0C ,0x00 ,0xDC ,0x01 ,0xC0 ,0x19 ,0x80 ,0x00 ,0x70 ,0x06 
    ,0xE7 ,0xFD ,0xCF ,0x9D ,0x80 ,0x3B ,0x80 ,0x77 ,0x00 ,0xE0 ,0x00 ,0x01 ,0xF0 ,0xF2 ,0x40 
    ,0x0E ,0x01 ,0xDC ,0x00 ,0xC0 ,0x19 ,0x80 ,0x00 ,0x70 ,0x0E ,0xE0 ,0x1D ,0xCF ,0x1D ,0x80 
    ,0x3B ,0x80 ,0x77 ,0x00 ,0xE0 ,0x00 ,0x00 ,0xE6 ,0x79 ,0x00 ,0x0F ,0xFF ,0xDF ,0xFC ,0xFF 
    ,0xF9 ,0xFF ,0xC0 ,0x7F ,0xFE ,0xE0 ,0x1D ,0xC7 ,0x1D ,0xFF ,0xFB ,0xFF ,0xF7 ,0xFF ,0xE0 
    ,0x00 ,0x00 ,0x49 ,0x3D ,0x00 ,0x0F ,0xFF ,0x9F ,0xFC ,0xFF ,0xF9 ,0xFF ,0xC0 ,0x7F ,0xFE 
    ,0xE0 ,0x1D ,0xC2 ,0x1D ,0xFF ,0xF1 ,0xFF ,0xE3 ,0xFF ,0xC0 ,0x00 ,0x00 ,0x1C ,0x9E ,0x00 
    ,0x0F ,0xFF ,0x1F ,0xFC ,0x7F ,0xE1 ,0xFF ,0xC0 ,0x7F ,0xFC ,0xE0 ,0x1D ,0xC0 ,0x1D ,0xFF 
    ,0xE0 ,0xFF ,0xC1 ,0xFF ,0x80 ,0x00 ,0x00 ,0x1E ,0x4C ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x0F ,0x20 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x07 ,0x90 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0xE0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x01 ,0xC0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x80 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
    ,0x00 ,0x00 ,0x00 
}; 
+0

格式是什麼呢?'file'只有data'說'。從 – 2012-12-30 18:14:49

+0

我在查看文檔和下面的鏈接後可以看出來,它是單色的bmp。http://bluebamboo.helpserve.com/index.php?/Knowledgebase/Article/View/48 – FrankGibbs

回答

3

看一看P25 Development Guide V3.4.1

我不明白前五個字符是什麼。但是,下面的字符是一個esacpe序列:

0x1B, 0x58, 0x31, 0x19, 0x20 

它們在水平模式下打印一個位圖。 0x19和0x20分別是水平尺寸(時間8)和垂直尺寸。所以圖像是200×32像素。接下來的25 x 32字節包含像素(黑白,每像素1位)。

我希望整個事情是810個字節長(5個字節身份不明的,5個字節轉義序列,25×32個字節的像素數據)。我不明白爲什麼它有796

更新工程:

要一個UIImage轉換成原始的黑白數據(不轉義序列),下面的代碼應該有所幫助。我希望仍然支持每像素1位的位圖。

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); 
size_t bytesPerRow = (uiImage.size.width + 7)/8; 
size_t imageDataSize = uiImage.size.height * bytesPerRow; 
unsigned char* imgData = (unsigned char*) malloc(imageDataSize); 
CGContextRef context = CGBitmapContextCreate(imgData, 
    uiImage.size.width, uiImage.size.height, 
    1, bytesPerRow, 
    colorSpace, kCGImageAlphaNone); 

UIGraphicsPushContext(context); 
[uiImage drawInRect: CGRectMake(0.0, 0.0, uiImage.size.width, uiImage.size.height)]; 
UIGraphicsPopContext(); 

CGContextRelease(context); 
CGColorSpaceRelease(colorSpace); 

for (int i = 0; i < imageDataSize; i++) 
    imgData[i] = ~imgData[i]; 

... send the image (imgData) to the printer ... 

free(imgData); 
+0

我同意數組的大小應該是810.我認爲圖像的最後14個字節是白色的,他們的缺席沒有干擾打印靜態圖像。現在我只需要弄清楚如何將UIImage轉換爲十六進制數組,黑白每像素一個字節。 – FrankGibbs

+0

@FrankGibbs:我已經更新了我的答案。該代碼可能會幫助您轉換UIImage。 – Codo

+0

這個錯誤是否意味着每像素1位位圖不再被支持? :CGBitmapContextCreate:不支持的參數組合:1個整數位/分量; 1比特/像素; 1分量色彩空間; kCGImageAlphaNone; 25個字節/行。 – FrankGibbs

0

其最簡單的開始與黑白圖像(I使用png格式)的4個字節通過使用CgContextRef和CgContextDrawImage分配給每個像素,其中可以得到的數據(我用CGBitmapContextCreate方法填充一個像素數據的數組,以及從編輯的數據數組中創建一個黑白圖像。我平均每個像素的RGB值,然後將所有像素值更改爲黑色或白色(alpha == 255),取決於平均值rgb's

然後,您需要將每8個像素打包到1個打印字節中(因此,對於4個字節的像素,請查看數據數組中的32個字節的集合,並設置打印字節的二進制值打開或關閉取決於w如果像素是黑色的(加上pow(2,7-(8像素序列中的像素位置))或白色(無所事事)。

我將.png圖像轉換爲黑白.png,然後轉換爲二進制,並將值打印在屏幕上。儘量保持你的巴紐的寬度在8的倍數,否則你會遇到麻煩(因爲你需要8個字節轉換成1個字節。

+0

我還沒有一個工作示例。這是我正在開發的許多項目之一。一旦我有一個工作示例,我會發布它。 – FrankGibbs

+0

謝謝弗蘭克。我仍然在搞清楚如何將圖像轉換爲字節數組。如果我有任何消息,我也會發布。 – ruanE

+0

我已經添加了迄今爲止設法解決的問題。下面是我到目前爲止將圖像轉換爲p25i打印機所需格式的代碼的鏈接:http://stackoverflow.com/questions/13838283/how-to-convert-image-to-bitmap-code-for -bluetooth打印功能於iphone/14278638#14278638 – ruanE

相關問題