2014-10-07 2 views
0

Я попытался переписать RNFrostedSidebar с помощью Swift, но я встретил проблему.Как использовать UnsafePointer в vImageBoxConvolve_ARGB8888() с помощью Swift?

В строке 99 ~ 101 в RNFrostedSidebar.m,

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'? Если вы объявили их изменчивыми, использование префикса '&' должно работать. –

+0

@NateCook Как это: 'пусть effectInBuffer = vImage_Buffer (данные: CGBitmapContextGetData (effectInContext), высота: CGBitmapContextGetHeight (effectInContext), ширина: CGBitmapContextGetWidth (effectInContext), rowBytes: CGBitmapContextGetBytesPerRow (effectInContext))' – WildCat

ответ

2

Проблема заключается в том, что вам необходимо объявить любые переменные, которые будут переданы как UnsafePointer или UnsafeMutablePointer в качестве изменяемых. То есть, использовать var вместо let в объявлении:

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

А потом префикс & в вызове функции:

vImageBoxConvolve_ARGB8888(&effectInBuffer, ...) 

Вы должны сделать это для source, dest, tempBuffer , и backgroundColor параметров.

+0

Спасибо большое !!! – WildCat

Смежные вопросы