2016-10-20 1 views

Antwort

1

Ich antwortete nur eine Teilmenge der eine ähnliche Frage hier: Iterate over individual pixels of a UIImage with height information

Hier ist, wie Sie die oberen und unteren einzigartige Pixel.

func pixelNotMatchingTopLeftColor(in image: UIImage, first isFirst: Bool) -> CGPoint? { 
     let width = Int(image.size.width) 
     let height = Int(image.size.height) 
     guard width > 1 || height < 1 else { 
      return nil 
     } 
     if let cfData:CFData = image.cgImage?.dataProvider?.data, let pointer = CFDataGetBytePtr(cfData) { 
      let cornerPixelRed = pointer.pointee 
      let cornerPixelGreen = pointer.advanced(by: 0).pointee 
      let cornerPixelBlue = pointer.advanced(by: 1).pointee 
      let cornerPixelAlpha = pointer.advanced(by: 2).pointee 
      let bytesPerpixel = 4 
      let firstPixel = 1 * bytesPerpixel 
      let lastPixel = width * height * bytesPerpixel - 1 * bytesPerpixel 
      let range = isFirst ? stride(from: firstPixel, through: lastPixel, by: bytesPerpixel) : 
            stride(from: lastPixel, through: firstPixel + bytesPerPixel, by: -bytesPerpixel) 
      for pixelAddress in range { 
        if pointer.advanced(by: pixelAddress).pointee != cornerPixelRed ||  //Red 
         pointer.advanced(by: pixelAddress + 1).pointee != cornerPixelGreen || //Green 
         pointer.advanced(by: pixelAddress + 2).pointee != cornerPixelBlue || //Blue 
         pointer.advanced(by: pixelAddress + 3).pointee != cornerPixelAlpha { //Alpha 
         print(pixelAddress) 
         return CGPoint(x: (pixelAddress/bytesPerpixel) % width, y: (pixelAddress/bytesPerpixel)/width) 
        } 
       } 
     } 
     return nil 
    } 

    func firstUniquePixel(in image: UIImage) -> CGPoint? { 
     return pixelNotMatchingTopLeftColor(in: image, first: true) 
    } 

    func lastUniquePixel(in image: UIImage) -> CGPoint? { 
     return pixelNotMatchingTopLeftColor(in: image, first: false) 
    } 

Sie haben etwas ähnliches für links und rechts zu tun (wenn Sie Probleme herauszufinden, den Zeiger Mathe haben, dann lassen Sie mich wissen). Dann rufen Sie oben, links, unten und rechts einfach CGImageCreateWithImageInRect.

Verwandte Themen