Repository navigation
move storage type conversion trait from ImageCore to Colors #475
Description
Activity
I have no objection to "defining" them in Colors or ColorTypes, but I am not comfortable exporting them. 😕
I can fully understand why you would prefer to have them defined in Colors (or ColorTypes), but I don't see what the trouble is with having them in ImageCore.
The same goes for
clamp01andclamp01nan.(cf. #469 (comment))Also, as you know, there is the inconsistency problem with
floatother than forFixedPoint/AbstractFloat.I have no objection to "defining" them in Colors or ColorTypes, but I am not comfortable exporting them.
I'm okay with this since it's mainly the package developer that needs to take care of the storage type.
My main consideration when proposing this move is that I want to give better support for them on broader color types. Currently,
julia> n0f8(RGB) RGB{N0f8} julia> n0f8(RGB{Float32}) RGB{N0f8} julia> n0f8(RGB24) ERROR: TypeError: in Type{...} expression, expected UnionAll, got Type{RGB24} Stacktrace: [1] n0f8(#unused#::Type{RGB24}) @ ImageCore ~/.julia/packages/ImageCore/iXG0W/src/convert_reinterpret.jl:82 [2] top-level scope @ REPL[21]:1
This need arises when I tried to convert all colorant images to N0f8/UInt8 byte sequences:
canonical_colorant_type(::Type{CT}) where CT<:Colorant = n0f8(CT) canonical_colorant_type(::Type{T}) where T<:Real = Gray{N0f8}
but I don't see what the trouble is with having them in ImageCore.
The only reason that I feel it better to live in Colors is that they are pixel-level operations. 😄
Even if we do the migration, I don't see any reason not to fix
n0f8(RGB24)etc. in the current ImageCore. (I'm not sure whethern0f8(RGB24)should returnRGB{N0f8}orRGB24, though.)Reacted by Johnny ChenI think it's straightforward to define
n0f8and so on inFixedPointNumbersand implementn0f8(::Colorant)and so on inColorTypes. However, I'm not sure that it's really a good idea forFixedPointNumbersto provide such non-generic functions.
Also, I don't thinkfloat32andfloat64are functions that should be exported by the low-level packages.However, I think the following should be solved within ColorTypes.
julia> convert(Colorant{Float32}, RGB24(1)) ERROR: nonparametric type RGB24 has ambiguous destination Colorant{Float32, N} where N
(Of course, this is a known issue:
https://github.com/JuliaGraphics/ColorTypes.jl/blob/81297fff41e28dc64ace72a37c090ee22363ba71/test/conversions.jl#L446)Reacted by Johnny ChenMakes sense to me; either move or not are good. We can keep this issue open until we decide the 1.0 status.
Reacted by kimikage
It looks like the most appropriate place for these traits is here:
https://github.com/JuliaImages/ImageCore.jl/blob/4fb132187d68054be7413ec229071115c14f72bd/src/convert_reinterpret.jl#L61-L107