diff --git a/src/imfilter.jl b/src/imfilter.jl index ab19f57..1d31156 100644 --- a/src/imfilter.jl +++ b/src/imfilter.jl @@ -227,10 +227,7 @@ end # Step 5: if necessary, pick an algorithm function imfilter!(out::AbstractArray, img::AbstractArray, kernel::ProcessedKernel, border::AbstractBorder) - if any(x -> (isa(x, Adjoint) || isa(x, Transpose)) && isa(x.parent, OffsetVector) && first(OffsetArrays.center(x.parent)) != 1, kernel) - @warn "A transposed OffsetVector automatically has an index of 1 in the first dimension. \ - Consider using an OffsetMatrix to control the index of each dimension." - end + _warn_if_transposed_from_offset_vector(kernel) imfilter!(out, img, kernel, border, filter_algorithm(out, img, kernel)) end diff --git a/src/utils.jl b/src/utils.jl index 80e3839..45368db 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -131,3 +131,14 @@ accumfilter(pixelval::Colorant{N0f8}, filterval::N0f8) = float32(c)*Float32(filt # In theory, the following might need to be specialized. For safety, make it a # standalone function call. safe_for_prod(x, ref) = oftype(ref, x) + +function _warn_if_transposed_from_offset_vector(kernel::ProcessedKernel) + if any(_is_transposed_offset_vector, kernel) + @warn "A transposed OffsetVector automatically has an index of 1 in the first dimension. " * + "Consider using an OffsetMatrix to control the offset of each dimension." + end +end + +_is_transposed_offset_vector(x::Adjoint{<:Any, <:OffsetVector}) = Base.has_offset_axes(parent(x)) +_is_transposed_offset_vector(x::Transpose{<:Any, <:OffsetVector}) = Base.has_offset_axes(parent(x)) +_is_transposed_offset_vector(_) = false