I ran into this when working with OMETIFF.jl returned AxisArray objects in IJulia, which uses PNGFiles for display:
julia> using FixedPointNumbers, Colors, PNGFiles, AxisArrays
julia> img = rand(Gray{N0f16}, 100, 100);
julia> PNGFiles.save("img.png", img); # works as expected
julia> PNGFiles.save("img2.png", AxisArray(img)); # wrapped with AxisArrays
ERROR: conversion to pointer not defined for AxisArray{Gray{N0f16}, 1, SubArray{Gray{N0f16}, 1, Matrix{Gray{N0f16}}, Tuple{Base.Slice{Base.OneTo{Int64}}, Int64}, true}, Tuple{Axis{:col, Base.OneTo{Int64}}}}
Stacktrace:
[1] error(s::String)
@ Base ./error.jl:33
[2] unsafe_convert(#unused#::Type{Ptr{Gray{N0f16}}}, a::AxisArray{Gray{N0f16}, 1, SubArray{Gray{N0f16}, 1, Matrix{Gray{N0f16}}, Tuple{Base.Slice{Base.OneTo{Int64}}, Int64}, true}, Tuple{Axis{:col, Base.OneTo{Int64}}}})
@ Base ./pointer.jl:67
[3] pointer(x::AxisArray{Gray{N0f16}, 1, SubArray{Gray{N0f16}, 1, Matrix{Gray{N0f16}}, Tuple{Base.Slice{Base.OneTo{Int64}}, Int64}, true}, Tuple{Axis{:col, Base.OneTo{Int64}}}})
@ Base ./abstractarray.jl:1116
[4] iterate
@ ./generator.jl:47 [inlined]
[5] collect(itr::Base.Generator{Base.Generator{Base.OneTo{Int64}, Base.var"#193#194"{AxisArray{Gray{N0f16}, 2, Matrix{Gray{N0f16}}, Tuple{Axis{:col, Base.OneTo{Int64}}, Axis{:row, Base.OneTo{Int64}}}}}}, typeof(pointer)})
@ Base ./array.jl:681
[6] map
@ ./abstractarray.jl:2323 [inlined]
[7] _write_image(buf::AxisArray{Gray{N0f16}, 2, Matrix{Gray{N0f16}}, Tuple{Axis{:col, Base.OneTo{Int64}}, Axis{:row, Base.OneTo{Int64}}}}, png_ptr::Ptr{Nothing}, info_ptr::Ptr{Nothing})
@ PNGFiles ~/.julia/packages/PNGFiles/dIbpb/src/io.jl:430
[8] _save(png_ptr::Ptr{Nothing}, info_ptr::Ptr{Nothing}, image::AxisArray{Gray{N0f16}, 2, Matrix{Gray{N0f16}}, Tuple{Axis{:row, Base.OneTo{Int64}}, Axis{:col, Base.OneTo{Int64}}}}; compression_level::Int64, compression_strategy::Int64, filters::Int64, palette::Nothing)
@ PNGFiles ~/.julia/packages/PNGFiles/dIbpb/src/io.jl:418
[9] save(fpath::String, image::AxisArray{Gray{N0f16}, 2, Matrix{Gray{N0f16}}, Tuple{Axis{:row, Base.OneTo{Int64}}, Axis{:col, Base.OneTo{Int64}}}}; compression_level::Int64, compression_strategy::Int64, filters::Int64, palette::Nothing)
@ PNGFiles ~/.julia/packages/PNGFiles/dIbpb/src/io.jl:298
[10] save(fpath::String, image::AxisArray{Gray{N0f16}, 2, Matrix{Gray{N0f16}}, Tuple{Axis{:row, Base.OneTo{Int64}}, Axis{:col, Base.OneTo{Int64}}}})
@ PNGFiles ~/.julia/packages/PNGFiles/dIbpb/src/io.jl:284
[11] top-level scope
@ REPL[5]:1
I ran into this when working with OMETIFF.jl returned AxisArray objects in IJulia, which uses PNGFiles for display:
This breaks IJulia's display of AxisArrays:
Thoughts @IanButterworth @johnnychen94 ?