@@ -222,6 +222,56 @@ These values are close to the channels of `c`, but have been rounded
222
222
off---each channel is encoded with only 8 bits, so some approximation
223
223
of the exact floating-point value is unavoidable.
224
224
225
+ ## Preserving colorant type while conversion
226
+
227
+ While using ` Float32 ` , ` Float64 ` to convert the raw storage type of an image,
228
+ the color space information is lost. Replacaing ` Float32 ` , ` Float64 ` with their lower-case
229
+ forms preserves the colorant type.
230
+
231
+ - Grayscale Images
232
+
233
+ ``` jldoctest; setup = :(using ImageCore;)
234
+ julia> c = Gray(0.5)
235
+ Gray{Float64}(0.5)
236
+
237
+ julia> float64(c)
238
+ Gray{Float64}(0.5)
239
+
240
+ julia> Float64(c)
241
+ 0.5
242
+ ```
243
+ - Color Images
244
+
245
+ ``` jldoctest; setup = :(using ImageCore;)
246
+ julia> c = RGB(0.2, 0.4, 0.8)
247
+ RGB{Float64}(0.2,0.4,0.8)
248
+
249
+ julia> float64(c)
250
+ RGB{Float64}(0.2,0.4,0.8)
251
+
252
+ julia> Float64(c)
253
+ ERROR: MethodError: no method matching Float64(::RGB{Float64})
254
+ Closest candidates are:
255
+ Float32(::Int8) at float.jl:60
256
+ Float32(::Int16) at float.jl:60
257
+ Float32(::Int32) at float.jl:60
258
+ ...
259
+ Stacktrace:
260
+ [...]
261
+ ```
262
+ ** Note** : ` Float64(rgb_c) ` throws error because it does not implicitly convert RGB to single channel.
263
+
264
+ | Storage Type | Alternative |
265
+ | --- | --- |
266
+ | ` Float32 ` | [ ` float32 ` ] ( @ref ) |
267
+ | ` Float64 ` | [ ` float64 ` ] ( @ref ) |
268
+ | ` N0f8 ` | [ ` n0f8 ` ] ( @ref ) |
269
+ | ` N6f10 ` | [ ` n6f10 ` ] ( @ref ) |
270
+ | ` N4f12 ` | [ ` n4f12 ` ] ( @ref ) |
271
+ | ` N2f14 ` | [ ` n2f14 ` ] ( @ref ) |
272
+ | ` N0f16 ` | [ ` n0f16 ` ] ( @ref ) |
273
+
274
+
225
275
## [ A consistent scale for floating-point and "integer" colors: fixed-point numbers] (@id fixedpoint)
226
276
227
277
` c24 ` does not have an ` r ` field, but we can still use ` red ` to
0 commit comments