Skip to content

Commit

Permalink
working on ColorTransform
Browse files Browse the repository at this point in the history
  • Loading branch information
colemancda committed Jun 5, 2017
1 parent 290dec5 commit 5170e47
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 30 deletions.
54 changes: 34 additions & 20 deletions Sources/ColorTransform.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,47 +15,61 @@ public final class ColorTransform {

internal let internalPointer: cmsHTRANSFORM

public let context: Context?

/// Other CMS object wrappers / reference-backed value types to retain (besides the context)
private let retain: [Any]

// MARK: - Initialization

deinit {

cmsDeleteTransform(internalPointer)
}

internal init(_ internalPointer: cmsHTRANSFORM) {

self.internalPointer = internalPointer
}

/*
/// Creates a color transform for translating bitmaps.
public init?(input: (profile: Profile, format: UInt),
output: (profile: Profile, format: UInt),
intent: cmsUInt32Number,
flags: cmsUInt32Number,
public init?(input: (profile: Profile, format: cmsUInt32Number),
output: (profile: Profile, format: cmsUInt32Number),
intent: Intent,
flags: cmsUInt32Number = 0,
context: Context? = nil) {

// TODO: cmsCreateExtendedTransform

guard let internalPointer = cmsCreateTransformTHR(context?.internalPointer,
input.profile.internalPointer,
cmsUInt32Number(input.format),
output.profile.internalPointer,
cmsUInt32Number(output.format),
intent,
input.profile.internalReference.reference.internalPointer,
input.format,
output.profile.internalReference.reference.internalPointer,
output.format,
intent.rawValue,
flags)
else { return nil }

self.internalPointer = internalPointer
}*/
self.context = context
self.retain = [input.profile, output.profile]
}

// MARK: - Methods

/// Translates bitmaps according of parameters setup when creating the color transform.
public func transform(_ bitmap: Data) -> Data {

// FIXME
return Data()
let internalPointer = self.internalPointer

var output = Data(count: bitmap.count)

bitmap.withUnsafeBytes { (inputBytes: UnsafePointer<UInt8>) in

let inputBytes = UnsafeRawPointer(inputBytes)

output.withUnsafeMutableBytes { (outputBytes: UnsafeMutablePointer<UInt8>) in

let outputBytes = UnsafeMutableRawPointer(outputBytes)

cmsDoTransform(internalPointer, inputBytes, outputBytes, cmsUInt32Number(bitmap.count))
}
}

return output
}
}

Expand Down
18 changes: 18 additions & 0 deletions Sources/Intent.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
//
// Intent.swift
// LittleCMS
//
// Created by Alsey Coleman Miller on 6/5/17.
//
//

import CLCMS

/// ICC Intent
public enum Intent: UInt32 {

case perceptual = 0
case relativeColorimetric = 1
case saturation = 2
case abosoluteColorimetric = 3
}
3 changes: 2 additions & 1 deletion Sources/Pipeline.swift
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ public struct Pipeline {
self.internalReference = CopyOnWrite(internalReference)
}

/// Allocates an empty pipeline.
/// Creates an empty pipeline.
///
/// Final Input and output channels must be specified at creation time.
public init?(channels: (input: UInt, output: UInt), context: Context? = nil) {

Expand Down
7 changes: 0 additions & 7 deletions Sources/Profile.swift
Original file line number Diff line number Diff line change
Expand Up @@ -160,13 +160,6 @@ internal extension Profile {
cmsCloseProfile(internalPointer)
}

@inline(__always)
internal init(_ internalPointer: cmsHPROFILE) {

self.internalPointer = internalPointer
self.context = Reference.context(for: internalPointer)
}

/// Creates a fake NULL profile.
///
/// This profile return 1 channel as always 0.
Expand Down
4 changes: 2 additions & 2 deletions Sources/Protocols.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@ internal protocol HandleObject {

associatedtype InternalPointer

init(_ internalPointer: InternalPointer)

var internalPointer: InternalPointer { get }
}

Expand All @@ -39,6 +37,8 @@ internal protocol DuplicableHandle: CopyableHandle {

/// The Little CMS Function that creates a duplicate of the handler.
static var cmsDuplicate: cmsDuplicateFunction { get }

init(_ internalPointer: InternalPointer)
}

extension DuplicableHandle {
Expand Down

0 comments on commit 5170e47

Please sign in to comment.