diff --git a/src/imfilter.jl b/src/imfilter.jl index 283352b..1d31156 100644 --- a/src/imfilter.jl +++ b/src/imfilter.jl @@ -227,6 +227,7 @@ end # Step 5: if necessary, pick an algorithm function imfilter!(out::AbstractArray, img::AbstractArray, kernel::ProcessedKernel, border::AbstractBorder) + _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..ddf6c27 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::Tuple) + 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