2015-04-01 5 views
0

Я хочу, чтобы все пиксели на экране были настроены на определенный цвет. Метод, который я использую, создает все пиксели в массиве необработанных данных, а затем создает UIImage, который я ввел в UIImageView. Я обрезается код вниз к этому, который все еще показывает проблему, я думаю, что я сделал что-то глупое, создавая изображение, но я прочитал всю документацию и IMHO все кажется прекрасным:Превращение необработанной пиксельной информации ARGB в UIImage

STRUCT для сохранения pixeldata

public struct PixelData { 
    var a: UInt8 = 255 
    var r: UInt8 
    var g: UInt8 
    var b: UInt8 
} 

Заполнение массива левой половины красный, правая половина черного

func halfRood()->[PixelData] { 
     var data: [PixelData] = [] 

     for(var i = 0; i < Int(Constants.Resolution.x); i++) { 
      for(var j = 0; j < Int(Constants.Resolution.y); j++) { 
       if(j < Int(Constants.Resolution.y/2)) { 
        data.append(PixelData(a: 255, r: 255, g: 0, b: 0)) 
       } else { 
        data.append(PixelData(a: 255, r: 0, g: 0, b: 0)) 
       } 

      } 
     } 

     return data 
    } 

Возврат изображения из растрового изображения

func imageFromARGB32Bitmap(pixels: [PixelData], width: UInt, height: UInt) -> UIImage? { 
    let bitsPerComponent: UInt = 8 
    let bitsPerPixel: UInt = 32 
    let rgbColorSpace = CGColorSpaceCreateDeviceRGB() 
    let bitmapInfo:CGBitmapInfo = CGBitmapInfo(CGImageAlphaInfo.PremultipliedFirst.rawValue) 

    var data = pixels 
    let providerRef = CGDataProviderCreateWithCFData(NSData(bytes: &data, length: data.count * sizeof(PixelData))) 
    let providerRefthing: CGDataProvider = providerRef 
    let cgImage = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, width * UInt(sizeof(PixelData)), rgbColorSpace, bitmapInfo, providerRef, nil, true, kCGRenderingIntentDefault) 
    let cgiimagething: CGImage = cgImage 
    return UIImage(CGImage: cgImage) 
} 

И, наконец, установив функцию updateUI()

func updateUI() { 
     let data = halfRood() 
     if let image = imageFromARGB32Bitmap(data, width: UInt(Constants.Resolution.x), height: UInt(Constants.Resolution.y)) { 
      imageView?.image = image 
     } 
    } 

Выход выглядит следующим образом картины, в то время как я ожидал что-то вроде: [красной половинки | черная половина]

currentSituation

ответ

2

CoreGraphics ожидает данные пикселя в виде строк, а не столбцов. Просто переверните свои заявления, например:

func halfRood()->[PixelData] { 
    var data: [PixelData] = [] 
    for(var y = 0; y < Int(Constants.Resolution.y); y++) { 
     for(var x = 0; x < Int(Constants.Resolution.x); x++) { 
      if(y < Int(Constants.Resolution.y/2)) { 
       data.append(PixelData(a: 255, r: 255, g: 0, b: 0)) 
      } else { 
       data.append(PixelData(a: 255, r: 0, g: 0, b: 0)) 
      } 
     } 
    } 

    return data 
} 
+0

Это было решение, спасибо большое! – Simon