This commit is contained in:
Jon Janzen
2020-12-21 19:56:55 -07:00
parent 55a3036c76
commit d7f2e2cbb2
4 changed files with 209 additions and 1 deletions

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1230"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "FC74E21A2591889F00ACBBFF"
BuildableName = "ImageCreation"
BlueprintName = "ImageCreation"
ReferencedContainer = "container:ImageCreation.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "FC74E21A2591889F00ACBBFF"
BuildableName = "ImageCreation"
BlueprintName = "ImageCreation"
ReferencedContainer = "container:ImageCreation.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<EnvironmentVariables>
<EnvironmentVariable
key = "CGBITMAP_CONTEXT_LOG_ERRORS"
value = "1"
isEnabled = "YES">
</EnvironmentVariable>
</EnvironmentVariables>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "FC74E21A2591889F00ACBBFF"
BuildableName = "ImageCreation"
BlueprintName = "ImageCreation"
ReferencedContainer = "container:ImageCreation.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
uuid = "2AB13B00-E21B-4223-B6C7-A546E02EE846"
type = "1"
version = "2.0">
</Bucket>

View File

@@ -10,5 +10,13 @@
<integer>0</integer> <integer>0</integer>
</dict> </dict>
</dict> </dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>FC74E21A2591889F00ACBBFF</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict> </dict>
</plist> </plist>

View File

@@ -1,3 +1,4 @@
// //
// main.swift // main.swift
// ImageCreation // ImageCreation
@@ -7,5 +8,113 @@
import Foundation import Foundation
print("Hello, World!") let width = 2048
let height = width
let bitmapBytesPerRow = Int(width) * 4
let bitmapByteCount = bitmapBytesPerRow * height
enum Color {
case red
case green
case blue
case white
}
func nextColor(_ color: Color) -> Color {
switch color {
case .red:
return .green
case .green:
return .blue
case .blue:
return .white
case .white:
return .red
}
}
func redVal(_ currentColor: Color) -> UInt8 {
switch currentColor {
case .red:
return 255
case .green:
return 0
case .blue:
return 0
case .white:
return 255
}
}
func greenVal(_ currentColor: Color) -> UInt8 {
switch currentColor {
case .red:
return 0
case .green:
return 255
case .blue:
return 0
case .white:
return 255
}
}
func blueVal(_ currentColor: Color) -> UInt8 {
switch currentColor {
case .red:
return 0
case .green:
return 0
case .blue:
return 255
case .white:
return 255
}
}
func createPixels() -> [UInt8] {
var bitmapData = [UInt8](repeating: 0, count: bitmapByteCount)
var currentColor = Color.red
let rectWidth = 256 / 4
let rectHeight = Int(Double(rectWidth) * 1.5)
for i in stride(from: 0, through: bitmapByteCount - 4, by: 4) {
bitmapData[i + 0] = redVal(currentColor)
bitmapData[i + 1] = greenVal(currentColor)
bitmapData[i + 2] = blueVal(currentColor)
bitmapData[i + 3] = 255 // alpha
if i % rectWidth == 0 && (i % (bitmapBytesPerRow * rectHeight)) != 0{
currentColor = nextColor(currentColor)
}
}
return bitmapData
}
func createBitmap() -> CGContext {
let colorSpace = CGColorSpaceCreateDeviceRGB()
var bitmapData = createPixels()
let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)
let context = CGContext.init(data: &bitmapData, width: width, height: height, bitsPerComponent: 8, bytesPerRow: bitmapBytesPerRow, space: colorSpace, bitmapInfo: bitmapInfo.rawValue)
return context!
}
func buildImage() {
let context = createBitmap()
let image = context.makeImage()
let url = URL(fileURLWithPath: "/Users/jon/Documents/testImage.png")
let dest = CGImageDestinationCreateWithURL(url as CFURL, kUTTypePNG, 1, nil)
CGImageDestinationAddImage(dest!, image!, nil)
CGImageDestinationFinalize(dest!)
}
buildImage()