2016-02-11 30 views
1

工作,所以這塊用來爲iOS 8的工作代碼,但不輟於iOS 9CGBitmapContextCreate停止針對iOS 9

let bitsPerComponent = CGImageGetBitsPerComponent(cgImage) 
let colorSpace = CGImageGetColorSpace(cgImage) 
let bitmapInfo = CGImageGetBitmapInfo(cgImage) 
let context = 
    CGBitmapContextCreate(
     nil, newPixelWidth, newPixelHeight, bitsPerComponent, 0, colorSpace, 
     bitmapInfo.rawValue) 

而且CoreGraphics中的解釋是:

CGBitmapContextCreate: unsupported parameter combination: 
    8 integer bits/component; 
    32 bits/pixel; 
    RGB color space model; kCGImageAlphaLast; 
    2400 bytes/row. 
Valid parameters for RGB color space model are: 
    16 bits per pixel,  5 bits per component,  kCGImageAlphaNoneSkipFirst 
    32 bits per pixel,  8 bits per component,  kCGImageAlphaNoneSkipFirst 
    32 bits per pixel,  8 bits per component,  kCGImageAlphaNoneSkipLast 
    32 bits per pixel,  8 bits per component,  kCGImageAlphaPremultipliedFirst 
    32 bits per pixel,  8 bits per component,  kCGImageAlphaPremultipliedLast 
    64 bits per pixel,  16 bits per component,  kCGImageAlphaPremultipliedLast 
    64 bits per pixel,  16 bits per component,  kCGImageAlphaNoneSkipLast 
    128 bits per pixel,  32 bits per component,  kCGImageAlphaNoneSkipLast |kCGBitmapFloatComponents 
    128 bits per pixel,  32 bits per component,  kCGImageAlphaPremultipliedLast |kCGBitmapFloatComponents 

newPixelWidth是600和600 * 4 = 2400.這裏的交易是什麼?

回答

2

我不是專家,但你有沒有給你自己的答案?

32 bits per pixel,  8 bits per component,  kCGImageAlphaNoneSkipFirst 
32 bits per pixel,  8 bits per component,  kCGImageAlphaNoneSkipLast 
32 bits per pixel,  8 bits per component,  kCGImageAlphaPremultipliedFirst 
32 bits per pixel,  8 bits per component,  kCGImageAlphaPremultipliedLast 

沒有一個是kCGImageAlphaLast,所以我會認爲這是問題所在。

+0

我不明白如何不預先乘alpha將會以任何方式影響上下文的大小,但它仍然是一個很好的觀點。麻煩的是,OP傳遞的是Core Graphics爲該圖像生成*自身*的位圖信息(以及其他參數)。當然,一個奇怪的崩潰,但我不能發現任何OP的代碼錯誤。 – Hamish

+0

@ originaluser2查看一些「相關」問題和答案。更改位圖信息值確實很重要。 - 另外,CGImageBitmapInfo中還有更多的不僅僅是alpha,所以OP可能會以某種方式誤導這個值。正如我所說,我不是這方面的專家,所以我只是猜測。 – matt

+0

@matt你是對的。將'CGImageAlphaInfo.PremultipliedLast.rawValue'作爲最後一個參數傳遞給'CGBitmapContextCreate'確實可行。所以我認爲用最新的iOS/SDK調整一個有效的任意CG圖像的大小並沒有一致的方法(或者可能已經這麼長時間了)。感謝您的幫助。還有最令人敬畏的書籍。 –