將Obj-C轉換爲Swift。正如你可以看到我宣稱let buf = UnsafeMutablePointer<UInt8>(CVPixelBufferGetBaseAddress(cvimgRef))
,所以我得到它下面的for循環錯誤。二進制運算符'+ ='不能應用於'Int'和'UInt8'類型的操作數。將Obj-C轉換爲Swift。
二元運算符「+ =」不能應用於類型的操作數「詮釋」和「UINT8」
另外,作爲一個小編,我不知道怎麼翻譯,其餘的OBJ-C for循環下面的代碼。這斜線是什麼意思,我該如何處理指針?我不得不說不安全的地方嗎?
// process the frame of video
func captureOutput(captureOutput:AVCaptureOutput, didOutputSampleBuffer sampleBuffer:CMSampleBuffer, fromConnection connection:AVCaptureConnection) {
// if we're paused don't do anything
if currentState == CurrentState.statePaused {
// reset our frame counter
self.validFrameCounter = 0
return
}
// this is the image buffer
var cvimgRef:CVImageBufferRef = CMSampleBufferGetImageBuffer(sampleBuffer)
// Lock the image buffer
CVPixelBufferLockBaseAddress(cvimgRef, 0)
// access the data
var width: size_t = CVPixelBufferGetWidth(cvimgRef)
var height:size_t = CVPixelBufferGetHeight(cvimgRef)
// get the raw image bytes
let buf = UnsafeMutablePointer<UInt8>(CVPixelBufferGetBaseAddress(cvimgRef))
var bprow: size_t = CVPixelBufferGetBytesPerRow(cvimgRef)
var r = 0
var g = 0
var b = 0
for var y = 0; y < height; y++ {
for var x = 0; x < width * 4; x += 4 {
b += buf[x]; g += buf[x + 1]; r += buf[x + 2] // error
}
buf += bprow() // error
}
剩餘的Obj-C代碼。
r/=255*(float) (width*height);
g/=255*(float) (width*height);
b/=255*(float) (width*height);
斜線代表師... – Volker
閱讀錯誤信息,並看看您的變量! 'var r = 0'定義一個'Int','buf [x]'是一個'UInt8'。然後閱讀Swift書:*「值永遠不會被隱式轉換爲另一種類型」* ...並且'r/= 255 *(float)(width * height)中的星星''do * not *表示指針:) –
好吧,我會讀它馬丁。但關於沃爾克的分標誌。我顯然認爲是這樣,但後來我認爲這只是別的,因爲你如何在任務操作員之前有一個分標誌?那麼馬丁這句話的意思是'var r/= 255 *(width * height)'?我認爲第一個星號是一個指針。哎呀。在每個作業或分號之後是否加逗號?哦,Swift不需要任何東西? – Edward