我有顯示來自 RGBA 的第一個像素的 Swift 代碼UIImage:
let cgImage = image.cgImage
let data = cgImage.dataProvider?.data
let dataPtr = CFDataGetBytePtr(data)
let components = (
dataPtr[0],
dataPtr[1],
dataPtr[p2],
dataPtr[3]
)
當我列印組件的值時,我得到:
- .0 : 220
- .1 : 188
- .2 : 129
- .3 : 255
我想轉換這段代碼并在Objective-C專案中使用它,所以我在同一個影像上運行這段代碼:
CGImageRef cgImage = image.CGImage;
CFDataRef data = CGDataProviderCopyData(CGImageGetDataProvider(cgImage));
UInt8 * dataPtr = (UInt8 *) CFDataGetBytePtr(data);
UInt8 components[4] = {
dataPtr[0],
dataPtr[1],
dataPtr[2],
dataPtr[3]
};
當我列印它時,我得到:
?\x81\xff\U00000004
知道如何獲得快速價值中的價值嗎?
uj5u.com熱心網友回復:
如果您通過 NSLog 列印它,您可以指定格式如下:
UIImage *image = [UIImage imageNamed:@"Aurora"];
CGImageRef cgImage = image.CGImage;
CFDataRef data = CGDataProviderCopyData(CGImageGetDataProvider(cgImage));
uint8_t *dataPtr = (uint8_t *) CFDataGetBytePtr(data);
uint8_t components[4] = {
dataPtr[0],
dataPtr[1],
dataPtr[2],
dataPtr[3]
};
for (int i = 0; i < 4; i ) {
NSLog(@"index %i val %hhu", i, components[i]);
}
這為我提供了這個輸出(對于我的示例影像):
index 0 val 20
index 1 val 39
index 2 val 55
index 3 val 255
如果您在 lldb 上列印出來(使用 p/po/frame 變數),則會應用某些默認型別格式化程式。您可以使用以下命令查看它們:type summary list
您可以使用以下命令添加自己的自定義摘要:type summary add
https://lldb.llvm.org/use/variable.html#type-summary
在這種情況下,您應該能夠執行以下操作:
type summary add --summary-string "0=${var[0]%u}, 1=${var[1]%u}, 2=${var[2]%u}, 3=${var[3]%u}" 'uint8_t [4]'
您定義的型別摘要將列在 的“默認”類別下type summary list。
Category: default
-----------------------
uint8_t [4]: `0=${var[0]%u}, 1=${var[1]%u}, 2=${var[2]%u}, 3=${var[3]%u}`
然后,當您設定斷點時,po components它將使用定義的自定義型別摘要列印出來:
(lldb) po components
0=20, 1=39, 2=55, 3=255
您可以使用type summary delete <summary name>(ie type summary delete "uint8_t [4]") 洗掉型別摘要,也可以使用 洗掉所有自定義型別摘要type summary clear。
很可能有一種更簡單的方法可以從上面的鏈接中完成您在檔案的其余部分中嘗試做的事情,但是在檔案中使用一些自定義格式的東西對我來說并沒有立即起作用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/432405.html
