[swift] Swift SimpleImageViewer 이미지 픽셀 값 밝기 조정
이미지를 표시하고 조작하는 앱을 만들 때, 이미지의 밝기를 조정하는 기능은 매우 유용합니다. Swift에서 이미지의 픽셀 값을 밝기로 조정하는 방법을 알아보겠습니다.
이미지 픽셀 값 읽기
우선 이미지의 픽셀 값을 읽어오는 함수를 작성해야 합니다. 이 함수를 통해 이미지의 모든 픽셀 값을 가져올 수 있습니다.
import UIKit
func getPixelData(from image: UIImage) -> [UInt8]? {
guard let cgImage = image.cgImage else {
return nil
}
let width = cgImage.width
let height = cgImage.height
let bytesPerPixel = 4
let bytesPerRow = width * bytesPerPixel
let bitsPerComponent = 8
let pixelData = UnsafeMutablePointer<UInt8>.allocate(capacity: width * height * bytesPerPixel)
let colorSpace = CGColorSpaceCreateDeviceRGB()
let context = CGContext(data: pixelData,
width: width,
height: height,
bitsPerComponent: bitsPerComponent,
bytesPerRow: bytesPerRow,
space: colorSpace,
bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue | CGBitmapInfo.byteOrder32Big.rawValue)
context?.draw(cgImage, in: CGRect(x: 0, y: 0, width: width, height: height))
var pixelArray = [UInt8]()
for index in 0..<(width * height * bytesPerPixel) {
pixelArray.append(pixelData[index])
}
pixelData.deallocate()
return pixelArray
}
이미지 밝기 조정
이제 이미지의 픽셀 값을 가져올 수 있으므로, 이 값을 조정하여 밝기를 변경할 수 있습니다. 예를 들어, 모든 픽셀 값을 일정한 값 만큼 더하거나 뺌으로써 밝기를 조정할 수 있습니다.
func adjustBrightness(image: UIImage, adjustment: Int) -> UIImage? {
guard let pixelData = getPixelData(from: image) else {
return nil
}
var modifiedPixelData = pixelData
let bytesPerPixel = 4
for index in 0..<(pixelData.count / bytesPerPixel) {
let offset = index * bytesPerPixel
let red = modifiedPixelData[offset]
let green = modifiedPixelData[offset + 1]
let blue = modifiedPixelData[offset + 2]
modifiedPixelData[offset] = UInt8(max(0, min(255, Int(red) + adjustment)))
modifiedPixelData[offset + 1] = UInt8(max(0, min(255, Int(green) + adjustment)))
modifiedPixelData[offset + 2] = UInt8(max(0, min(255, Int(blue) + adjustment)))
}
let bitsPerComponent = 8
let width = image.cgImage!.width
let height = image.cgImage!.height
let bytesPerRow = width * bytesPerPixel
let colorSpace = CGColorSpaceCreateDeviceRGB()
let providerRef = CGDataProvider(data: NSData(bytes: &modifiedPixelData, length: modifiedPixelData.count * MemoryLayout<UInt8>.stride))
let bitmapInfo: UInt32 = CGBitmapInfo.byteOrder32Big.rawValue | CGImageAlphaInfo.premultipliedLast.rawValue
let renderingIntent = CGColorRenderingIntent.defaultIntent
let imageRef = CGImage(width: width,
height: height,
bitsPerComponent: bitsPerComponent,
bitsPerPixel: bytesPerPixel * bitsPerComponent,
bytesPerRow: bytesPerRow,
space: colorSpace,
bitmapInfo: bitmapInfo,
provider: providerRef!,
decode: nil,
shouldInterpolate: true,
intent: renderingIntent)
return UIImage(cgImage: imageRef!)
}
사용 예제
위의 함수를 사용하여 이미지 밝기를 조정하는 예제입니다.
let originalImage = UIImage(named: "image.jpg")
let adjustedImage = adjustBrightness(image: originalImage, adjustment: 50)
결론
Swift를 사용하여 이미지의 픽셀 값을 밝기로 조정하는 방법을 알아보았습니다. 이를 활용하여 이미지 처리 앱 등을 개발할 수 있습니다. 자세한 내용은 Swift 문서를 참조하십시오.