2014-10-07 24 views
0

我試圖用Swift重寫RNFrostedSidebar但我遇到了一個問題。如何在vImageBoxConvolve_ARGB8888()中使用Swift使用UnsafePointer?

在行99 RNFrostedSidebar.m〜101,

func vImageBoxConvolve_ARGB8888(_ src: UnsafePointer<vImage_Buffer>, 
    _ dest: UnsafePointer<vImage_Buffer>, 
    _ tempBuffer: UnsafeMutablePointer<Void>, 
    _ srcOffsetToROI_X: vImagePixelCount, 
    _ srcOffsetToROI_Y: vImagePixelCount, 
    _ kernel_height: UInt32, 
    _ kernel_width: UInt32, 
    _ backgroundColor: UnsafeMutablePointer<UInt8>, 
    _ flags: vImage_Flags) -> vImage_Error 

功能vImageBoxConvolve_ARGB8888(...)需要UnsafePointer,我試圖用effectInBuffer&effectInBuffer,但沒有奏效。

使用effectInBuffer作爲參數會導致'vImage_Buffer' is not convertible to 'UnsafePointer<vImage_Buffer>'錯誤。但在Using Swift with Cocoa and Objective-C,它似乎是有效的。

我怎麼能這樣做?

+0

你能告訴你如何聲明'effectInBuffer'和'effectOutBuffer'嗎?只要你聲明它們是可變的,使用'&'前綴就可以工作。 – 2014-10-07 01:26:23

+0

@NateCook像這樣:'讓effectInBuffer = vImage_Buffer(數據:CGBitmapContextGetData(effectInContext),高度:CGBitmapContextGetHeight(effectInContext),寬度:CGBitmapContextGetWidth(effectInContext),rowBytes:CGBitmapContextGetBytesPerRow(effectInContext))' – WildCat 2014-10-08 14:08:10

回答

2

問題是你需要聲明任何將作爲可變的UnsafePointerUnsafeMutablePointer傳遞的變量。也就是說,使用var代替let宣言:

var effectInBuffer = vImage_Buffer(data:CGBitmapContextGetData(effectInContext), 
    height:CGBitmapContextGetHeight(effectInContext), 
    width:CGBitmapContextGetWidth(effectInContext), 
    rowBytes:CGBitmapContextGetBytesPerRow(effectInContext)) 

然後用&在函數調用前綴:

vImageBoxConvolve_ARGB8888(&effectInBuffer, ...) 

你需要爲source做到這一點,desttempBuffer ,和backgroundColor參數。

+0

非常感謝!!! – WildCat 2014-10-09 00:51:00