diff --git a/src/Aardvark.Base.Tensors/Aardvark.Base.Tensors.fsproj b/src/Aardvark.Base.Tensors/Aardvark.Base.Tensors.fsproj index 263dd413..3ba10fad 100644 --- a/src/Aardvark.Base.Tensors/Aardvark.Base.Tensors.fsproj +++ b/src/Aardvark.Base.Tensors/Aardvark.Base.Tensors.fsproj @@ -20,9 +20,9 @@ <Compile Include="Extensions\TensorUtilitiesGenerated.fs" /> <Compile Include="Extensions\TensorMath.fs" /> <Compile Include="Extensions\TensorSlicing.fs" /> + <Compile Include="PixImage\ImageTrafo.fs" /> <Compile Include="PixImage\PixImageErrorMetric.fs" /> <Compile Include="PixImage\PixImageCube.fs" /> - <Compile Include="PixImage\ImageTrafo.fs" /> <Compile Include="PixImage\PixImageImageSharp.fs" /> <Compile Include="Algorithms\QR.fs" /> <Compile Include="Algorithms\SVD.fs" /> diff --git a/src/Aardvark.Base.Tensors/PixImage/ImageTrafo.fs b/src/Aardvark.Base.Tensors/PixImage/ImageTrafo.fs index b7373013..71a210d0 100644 --- a/src/Aardvark.Base.Tensors/PixImage/ImageTrafo.fs +++ b/src/Aardvark.Base.Tensors/PixImage/ImageTrafo.fs @@ -3,75 +3,75 @@ [<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>] module ImageTrafo = let private composeTable = - Dictionary.ofList [ - (ImageTrafo.Identity, ImageTrafo.Identity), ImageTrafo.Identity - (ImageTrafo.Identity, ImageTrafo.Rot90), ImageTrafo.Rot90 - (ImageTrafo.Identity, ImageTrafo.Rot180), ImageTrafo.Rot180 - (ImageTrafo.Identity, ImageTrafo.Rot270), ImageTrafo.Rot270 - (ImageTrafo.Identity, ImageTrafo.MirrorX), ImageTrafo.MirrorX - (ImageTrafo.Identity, ImageTrafo.Transpose), ImageTrafo.Transpose - (ImageTrafo.Identity, ImageTrafo.MirrorY), ImageTrafo.MirrorY - (ImageTrafo.Identity, ImageTrafo.Transverse), ImageTrafo.Transverse - (ImageTrafo.Rot90, ImageTrafo.Identity), ImageTrafo.Rot90 - (ImageTrafo.Rot90, ImageTrafo.Rot90), ImageTrafo.Rot180 - (ImageTrafo.Rot90, ImageTrafo.Rot180), ImageTrafo.Rot270 - (ImageTrafo.Rot90, ImageTrafo.Rot270), ImageTrafo.Identity - (ImageTrafo.Rot90, ImageTrafo.MirrorX), ImageTrafo.Transverse - (ImageTrafo.Rot90, ImageTrafo.Transpose), ImageTrafo.MirrorX - (ImageTrafo.Rot90, ImageTrafo.MirrorY), ImageTrafo.Transpose - (ImageTrafo.Rot90, ImageTrafo.Transverse), ImageTrafo.MirrorY - (ImageTrafo.Rot180, ImageTrafo.Identity), ImageTrafo.Rot180 - (ImageTrafo.Rot180, ImageTrafo.Rot90), ImageTrafo.Rot270 - (ImageTrafo.Rot180, ImageTrafo.Rot180), ImageTrafo.Identity - (ImageTrafo.Rot180, ImageTrafo.Rot270), ImageTrafo.Rot90 - (ImageTrafo.Rot180, ImageTrafo.MirrorX), ImageTrafo.MirrorY - (ImageTrafo.Rot180, ImageTrafo.Transpose), ImageTrafo.Transverse - (ImageTrafo.Rot180, ImageTrafo.MirrorY), ImageTrafo.MirrorX - (ImageTrafo.Rot180, ImageTrafo.Transverse), ImageTrafo.Transpose - (ImageTrafo.Rot270, ImageTrafo.Identity), ImageTrafo.Rot270 - (ImageTrafo.Rot270, ImageTrafo.Rot90), ImageTrafo.Identity - (ImageTrafo.Rot270, ImageTrafo.Rot180), ImageTrafo.Rot90 - (ImageTrafo.Rot270, ImageTrafo.Rot270), ImageTrafo.Rot180 - (ImageTrafo.Rot270, ImageTrafo.MirrorX), ImageTrafo.Transpose - (ImageTrafo.Rot270, ImageTrafo.Transpose), ImageTrafo.MirrorY - (ImageTrafo.Rot270, ImageTrafo.MirrorY), ImageTrafo.Transverse - (ImageTrafo.Rot270, ImageTrafo.Transverse), ImageTrafo.MirrorX - (ImageTrafo.MirrorX, ImageTrafo.Identity), ImageTrafo.MirrorX - (ImageTrafo.MirrorX, ImageTrafo.Rot90), ImageTrafo.Transpose - (ImageTrafo.MirrorX, ImageTrafo.Rot180), ImageTrafo.MirrorY - (ImageTrafo.MirrorX, ImageTrafo.Rot270), ImageTrafo.Transverse - (ImageTrafo.MirrorX, ImageTrafo.MirrorX), ImageTrafo.Identity - (ImageTrafo.MirrorX, ImageTrafo.Transpose), ImageTrafo.Rot90 - (ImageTrafo.MirrorX, ImageTrafo.MirrorY), ImageTrafo.Rot180 - (ImageTrafo.MirrorX, ImageTrafo.Transverse), ImageTrafo.Rot270 - (ImageTrafo.Transpose, ImageTrafo.Identity), ImageTrafo.Transpose - (ImageTrafo.Transpose, ImageTrafo.Rot90), ImageTrafo.MirrorY - (ImageTrafo.Transpose, ImageTrafo.Rot180), ImageTrafo.Transverse - (ImageTrafo.Transpose, ImageTrafo.Rot270), ImageTrafo.MirrorX - (ImageTrafo.Transpose, ImageTrafo.MirrorX), ImageTrafo.Rot270 - (ImageTrafo.Transpose, ImageTrafo.Transpose), ImageTrafo.Identity - (ImageTrafo.Transpose, ImageTrafo.MirrorY), ImageTrafo.Rot90 - (ImageTrafo.Transpose, ImageTrafo.Transverse), ImageTrafo.Rot180 - (ImageTrafo.MirrorY, ImageTrafo.Identity), ImageTrafo.MirrorY - (ImageTrafo.MirrorY, ImageTrafo.Rot90), ImageTrafo.Transverse - (ImageTrafo.MirrorY, ImageTrafo.Rot180), ImageTrafo.MirrorX - (ImageTrafo.MirrorY, ImageTrafo.Rot270), ImageTrafo.Transpose - (ImageTrafo.MirrorY, ImageTrafo.MirrorX), ImageTrafo.Rot180 - (ImageTrafo.MirrorY, ImageTrafo.Transpose), ImageTrafo.Rot270 - (ImageTrafo.MirrorY, ImageTrafo.MirrorY), ImageTrafo.Identity - (ImageTrafo.MirrorY, ImageTrafo.Transverse), ImageTrafo.Rot90 - (ImageTrafo.Transverse, ImageTrafo.Identity), ImageTrafo.Transverse - (ImageTrafo.Transverse, ImageTrafo.Rot90), ImageTrafo.MirrorX - (ImageTrafo.Transverse, ImageTrafo.Rot180), ImageTrafo.Transpose - (ImageTrafo.Transverse, ImageTrafo.Rot270), ImageTrafo.MirrorY - (ImageTrafo.Transverse, ImageTrafo.MirrorX), ImageTrafo.Rot90 - (ImageTrafo.Transverse, ImageTrafo.Transpose), ImageTrafo.Rot180 - (ImageTrafo.Transverse, ImageTrafo.MirrorY), ImageTrafo.Rot270 - (ImageTrafo.Transverse, ImageTrafo.Transverse), ImageTrafo.Identity + LookupTable.lookupTable [ + struct (ImageTrafo.Identity, ImageTrafo.Identity), ImageTrafo.Identity + struct (ImageTrafo.Identity, ImageTrafo.Rot90), ImageTrafo.Rot90 + struct (ImageTrafo.Identity, ImageTrafo.Rot180), ImageTrafo.Rot180 + struct (ImageTrafo.Identity, ImageTrafo.Rot270), ImageTrafo.Rot270 + struct (ImageTrafo.Identity, ImageTrafo.MirrorX), ImageTrafo.MirrorX + struct (ImageTrafo.Identity, ImageTrafo.Transpose), ImageTrafo.Transpose + struct (ImageTrafo.Identity, ImageTrafo.MirrorY), ImageTrafo.MirrorY + struct (ImageTrafo.Identity, ImageTrafo.Transverse), ImageTrafo.Transverse + struct (ImageTrafo.Rot90, ImageTrafo.Identity), ImageTrafo.Rot90 + struct (ImageTrafo.Rot90, ImageTrafo.Rot90), ImageTrafo.Rot180 + struct (ImageTrafo.Rot90, ImageTrafo.Rot180), ImageTrafo.Rot270 + struct (ImageTrafo.Rot90, ImageTrafo.Rot270), ImageTrafo.Identity + struct (ImageTrafo.Rot90, ImageTrafo.MirrorX), ImageTrafo.Transverse + struct (ImageTrafo.Rot90, ImageTrafo.Transpose), ImageTrafo.MirrorX + struct (ImageTrafo.Rot90, ImageTrafo.MirrorY), ImageTrafo.Transpose + struct (ImageTrafo.Rot90, ImageTrafo.Transverse), ImageTrafo.MirrorY + struct (ImageTrafo.Rot180, ImageTrafo.Identity), ImageTrafo.Rot180 + struct (ImageTrafo.Rot180, ImageTrafo.Rot90), ImageTrafo.Rot270 + struct (ImageTrafo.Rot180, ImageTrafo.Rot180), ImageTrafo.Identity + struct (ImageTrafo.Rot180, ImageTrafo.Rot270), ImageTrafo.Rot90 + struct (ImageTrafo.Rot180, ImageTrafo.MirrorX), ImageTrafo.MirrorY + struct (ImageTrafo.Rot180, ImageTrafo.Transpose), ImageTrafo.Transverse + struct (ImageTrafo.Rot180, ImageTrafo.MirrorY), ImageTrafo.MirrorX + struct (ImageTrafo.Rot180, ImageTrafo.Transverse), ImageTrafo.Transpose + struct (ImageTrafo.Rot270, ImageTrafo.Identity), ImageTrafo.Rot270 + struct (ImageTrafo.Rot270, ImageTrafo.Rot90), ImageTrafo.Identity + struct (ImageTrafo.Rot270, ImageTrafo.Rot180), ImageTrafo.Rot90 + struct (ImageTrafo.Rot270, ImageTrafo.Rot270), ImageTrafo.Rot180 + struct (ImageTrafo.Rot270, ImageTrafo.MirrorX), ImageTrafo.Transpose + struct (ImageTrafo.Rot270, ImageTrafo.Transpose), ImageTrafo.MirrorY + struct (ImageTrafo.Rot270, ImageTrafo.MirrorY), ImageTrafo.Transverse + struct (ImageTrafo.Rot270, ImageTrafo.Transverse), ImageTrafo.MirrorX + struct (ImageTrafo.MirrorX, ImageTrafo.Identity), ImageTrafo.MirrorX + struct (ImageTrafo.MirrorX, ImageTrafo.Rot90), ImageTrafo.Transpose + struct (ImageTrafo.MirrorX, ImageTrafo.Rot180), ImageTrafo.MirrorY + struct (ImageTrafo.MirrorX, ImageTrafo.Rot270), ImageTrafo.Transverse + struct (ImageTrafo.MirrorX, ImageTrafo.MirrorX), ImageTrafo.Identity + struct (ImageTrafo.MirrorX, ImageTrafo.Transpose), ImageTrafo.Rot90 + struct (ImageTrafo.MirrorX, ImageTrafo.MirrorY), ImageTrafo.Rot180 + struct (ImageTrafo.MirrorX, ImageTrafo.Transverse), ImageTrafo.Rot270 + struct (ImageTrafo.Transpose, ImageTrafo.Identity), ImageTrafo.Transpose + struct (ImageTrafo.Transpose, ImageTrafo.Rot90), ImageTrafo.MirrorY + struct (ImageTrafo.Transpose, ImageTrafo.Rot180), ImageTrafo.Transverse + struct (ImageTrafo.Transpose, ImageTrafo.Rot270), ImageTrafo.MirrorX + struct (ImageTrafo.Transpose, ImageTrafo.MirrorX), ImageTrafo.Rot270 + struct (ImageTrafo.Transpose, ImageTrafo.Transpose), ImageTrafo.Identity + struct (ImageTrafo.Transpose, ImageTrafo.MirrorY), ImageTrafo.Rot90 + struct (ImageTrafo.Transpose, ImageTrafo.Transverse), ImageTrafo.Rot180 + struct (ImageTrafo.MirrorY, ImageTrafo.Identity), ImageTrafo.MirrorY + struct (ImageTrafo.MirrorY, ImageTrafo.Rot90), ImageTrafo.Transverse + struct (ImageTrafo.MirrorY, ImageTrafo.Rot180), ImageTrafo.MirrorX + struct (ImageTrafo.MirrorY, ImageTrafo.Rot270), ImageTrafo.Transpose + struct (ImageTrafo.MirrorY, ImageTrafo.MirrorX), ImageTrafo.Rot180 + struct (ImageTrafo.MirrorY, ImageTrafo.Transpose), ImageTrafo.Rot270 + struct (ImageTrafo.MirrorY, ImageTrafo.MirrorY), ImageTrafo.Identity + struct (ImageTrafo.MirrorY, ImageTrafo.Transverse), ImageTrafo.Rot90 + struct (ImageTrafo.Transverse, ImageTrafo.Identity), ImageTrafo.Transverse + struct (ImageTrafo.Transverse, ImageTrafo.Rot90), ImageTrafo.MirrorX + struct (ImageTrafo.Transverse, ImageTrafo.Rot180), ImageTrafo.Transpose + struct (ImageTrafo.Transverse, ImageTrafo.Rot270), ImageTrafo.MirrorY + struct (ImageTrafo.Transverse, ImageTrafo.MirrorX), ImageTrafo.Rot90 + struct (ImageTrafo.Transverse, ImageTrafo.Transpose), ImageTrafo.Rot180 + struct (ImageTrafo.Transverse, ImageTrafo.MirrorY), ImageTrafo.Rot270 + struct (ImageTrafo.Transverse, ImageTrafo.Transverse), ImageTrafo.Identity ] let compose (l : ImageTrafo) (r : ImageTrafo) = - composeTable.[(l,r)] + composeTable (struct (l, r)) let inverse = LookupTable.lookupTable [ diff --git a/src/Aardvark.Base.Tensors/PixImage/PixImageCube.fs b/src/Aardvark.Base.Tensors/PixImage/PixImageCube.fs index 01455a6e..0b4eaf66 100644 --- a/src/Aardvark.Base.Tensors/PixImage/PixImageCube.fs +++ b/src/Aardvark.Base.Tensors/PixImage/PixImageCube.fs @@ -55,92 +55,6 @@ module FSharpPixImageCubeExtensions = module PixImageCube = module Trafo = - let private figureOutComposeOp () = - - let v = Volume<byte>(V3i.III * 10) - - let direct = Array.zeroCreate 8 - for o0 in 0..7 do - direct.[o0] <- v.Transformed(unbox o0).Info - - for o0 in 0..7 do - for o1 in 0..7 do - let nv = v.Transformed(unbox o0).Transformed(unbox o1).Info - - let res = direct |> Array.findIndex (fun di -> di.Equals(nv)) - - printfn "(ImageTrafo.%A, ImageTrafo.%A), ImageTrafo.%A" (unbox<ImageTrafo> o0) (unbox<ImageTrafo> o1) (unbox<ImageTrafo> res) - - let private composeTable = - Dictionary.ofList [ - (ImageTrafo.Identity, ImageTrafo.Identity), ImageTrafo.Identity - (ImageTrafo.Identity, ImageTrafo.Rot90), ImageTrafo.Rot90 - (ImageTrafo.Identity, ImageTrafo.Rot180), ImageTrafo.Rot180 - (ImageTrafo.Identity, ImageTrafo.Rot270), ImageTrafo.Rot270 - (ImageTrafo.Identity, ImageTrafo.MirrorX), ImageTrafo.MirrorX - (ImageTrafo.Identity, ImageTrafo.Transpose), ImageTrafo.Transpose - (ImageTrafo.Identity, ImageTrafo.MirrorY), ImageTrafo.MirrorY - (ImageTrafo.Identity, ImageTrafo.Transverse), ImageTrafo.Transverse - (ImageTrafo.Rot90, ImageTrafo.Identity), ImageTrafo.Rot90 - (ImageTrafo.Rot90, ImageTrafo.Rot90), ImageTrafo.Rot180 - (ImageTrafo.Rot90, ImageTrafo.Rot180), ImageTrafo.Rot270 - (ImageTrafo.Rot90, ImageTrafo.Rot270), ImageTrafo.Identity - (ImageTrafo.Rot90, ImageTrafo.MirrorX), ImageTrafo.Transverse - (ImageTrafo.Rot90, ImageTrafo.Transpose), ImageTrafo.MirrorX - (ImageTrafo.Rot90, ImageTrafo.MirrorY), ImageTrafo.Transpose - (ImageTrafo.Rot90, ImageTrafo.Transverse), ImageTrafo.MirrorY - (ImageTrafo.Rot180, ImageTrafo.Identity), ImageTrafo.Rot180 - (ImageTrafo.Rot180, ImageTrafo.Rot90), ImageTrafo.Rot270 - (ImageTrafo.Rot180, ImageTrafo.Rot180), ImageTrafo.Identity - (ImageTrafo.Rot180, ImageTrafo.Rot270), ImageTrafo.Rot90 - (ImageTrafo.Rot180, ImageTrafo.MirrorX), ImageTrafo.MirrorY - (ImageTrafo.Rot180, ImageTrafo.Transpose), ImageTrafo.Transverse - (ImageTrafo.Rot180, ImageTrafo.MirrorY), ImageTrafo.MirrorX - (ImageTrafo.Rot180, ImageTrafo.Transverse), ImageTrafo.Transpose - (ImageTrafo.Rot270, ImageTrafo.Identity), ImageTrafo.Rot270 - (ImageTrafo.Rot270, ImageTrafo.Rot90), ImageTrafo.Identity - (ImageTrafo.Rot270, ImageTrafo.Rot180), ImageTrafo.Rot90 - (ImageTrafo.Rot270, ImageTrafo.Rot270), ImageTrafo.Rot180 - (ImageTrafo.Rot270, ImageTrafo.MirrorX), ImageTrafo.Transpose - (ImageTrafo.Rot270, ImageTrafo.Transpose), ImageTrafo.MirrorY - (ImageTrafo.Rot270, ImageTrafo.MirrorY), ImageTrafo.Transverse - (ImageTrafo.Rot270, ImageTrafo.Transverse), ImageTrafo.MirrorX - (ImageTrafo.MirrorX, ImageTrafo.Identity), ImageTrafo.MirrorX - (ImageTrafo.MirrorX, ImageTrafo.Rot90), ImageTrafo.Transpose - (ImageTrafo.MirrorX, ImageTrafo.Rot180), ImageTrafo.MirrorY - (ImageTrafo.MirrorX, ImageTrafo.Rot270), ImageTrafo.Transverse - (ImageTrafo.MirrorX, ImageTrafo.MirrorX), ImageTrafo.Identity - (ImageTrafo.MirrorX, ImageTrafo.Transpose), ImageTrafo.Rot90 - (ImageTrafo.MirrorX, ImageTrafo.MirrorY), ImageTrafo.Rot180 - (ImageTrafo.MirrorX, ImageTrafo.Transverse), ImageTrafo.Rot270 - (ImageTrafo.Transpose, ImageTrafo.Identity), ImageTrafo.Transpose - (ImageTrafo.Transpose, ImageTrafo.Rot90), ImageTrafo.MirrorY - (ImageTrafo.Transpose, ImageTrafo.Rot180), ImageTrafo.Transverse - (ImageTrafo.Transpose, ImageTrafo.Rot270), ImageTrafo.MirrorX - (ImageTrafo.Transpose, ImageTrafo.MirrorX), ImageTrafo.Rot270 - (ImageTrafo.Transpose, ImageTrafo.Transpose), ImageTrafo.Identity - (ImageTrafo.Transpose, ImageTrafo.MirrorY), ImageTrafo.Rot90 - (ImageTrafo.Transpose, ImageTrafo.Transverse), ImageTrafo.Rot180 - (ImageTrafo.MirrorY, ImageTrafo.Identity), ImageTrafo.MirrorY - (ImageTrafo.MirrorY, ImageTrafo.Rot90), ImageTrafo.Transverse - (ImageTrafo.MirrorY, ImageTrafo.Rot180), ImageTrafo.MirrorX - (ImageTrafo.MirrorY, ImageTrafo.Rot270), ImageTrafo.Transpose - (ImageTrafo.MirrorY, ImageTrafo.MirrorX), ImageTrafo.Rot180 - (ImageTrafo.MirrorY, ImageTrafo.Transpose), ImageTrafo.Rot270 - (ImageTrafo.MirrorY, ImageTrafo.MirrorY), ImageTrafo.Identity - (ImageTrafo.MirrorY, ImageTrafo.Transverse), ImageTrafo.Rot90 - (ImageTrafo.Transverse, ImageTrafo.Identity), ImageTrafo.Transverse - (ImageTrafo.Transverse, ImageTrafo.Rot90), ImageTrafo.MirrorX - (ImageTrafo.Transverse, ImageTrafo.Rot180), ImageTrafo.Transpose - (ImageTrafo.Transverse, ImageTrafo.Rot270), ImageTrafo.MirrorY - (ImageTrafo.Transverse, ImageTrafo.MirrorX), ImageTrafo.Rot90 - (ImageTrafo.Transverse, ImageTrafo.Transpose), ImageTrafo.Rot180 - (ImageTrafo.Transverse, ImageTrafo.MirrorY), ImageTrafo.Rot270 - (ImageTrafo.Transverse, ImageTrafo.Transverse), ImageTrafo.Identity - ] - - let private composeTrafo (l : ImageTrafo) (r : ImageTrafo) = - composeTable.[(l,r)] let private identity = Map.ofList [ @@ -155,7 +69,7 @@ module FSharpPixImageCubeExtensions = let private compose (l : Map<CubeSide, CubeSide * ImageTrafo>) (r : Map<CubeSide, CubeSide * ImageTrafo>) : Map<CubeSide, CubeSide * ImageTrafo> = l |> Map.map (fun s (ts, lt) -> match Map.tryFind ts r with - | Some (fs, rt) -> fs, composeTrafo lt rt + | Some (fs, rt) -> fs, ImageTrafo.compose lt rt | None -> ts, lt ) diff --git a/src/Aardvark.Base.Tensors/PixImage/PixImageImageSharp.fs b/src/Aardvark.Base.Tensors/PixImage/PixImageImageSharp.fs index b8fbcf97..556e6796 100644 --- a/src/Aardvark.Base.Tensors/PixImage/PixImageImageSharp.fs +++ b/src/Aardvark.Base.Tensors/PixImage/PixImageImageSharp.fs @@ -225,29 +225,9 @@ module private ImageSharpHelpers = ) res - let getSize (trafo : ImageTrafo) (w : int) (h : int) = - match trafo with - | ImageTrafo.Transpose -> V2i(h, w) - | ImageTrafo.Transverse -> V2i(h, w) - | ImageTrafo.Rot90 -> V2i(h, w) - | ImageTrafo.Rot270 -> V2i(h, w) - | _ -> V2i(w,h) - let usingTransformed<'T> (fmt : Col.Format) (w : int) (h : int) (trafo : ImageTrafo) (action : PixImage<'T> -> unit) = - let s = getSize trafo w h - - let inv = - match trafo with - | ImageTrafo.Identity -> ImageTrafo.Identity - | ImageTrafo.Rot90 -> ImageTrafo.Rot270 - | ImageTrafo.Rot180 -> ImageTrafo.Rot180 - | ImageTrafo.Rot270 -> ImageTrafo.Rot90 - | ImageTrafo.MirrorX -> ImageTrafo.MirrorX - | ImageTrafo.MirrorY -> ImageTrafo.MirrorY - | ImageTrafo.Transpose -> ImageTrafo.Transpose - | ImageTrafo.Transverse -> ImageTrafo.Transverse - | _ -> failwithf "bad image trafo: %A" trafo - + let s = ImageTrafo.transformSize (V2i(w, h)) trafo + let inv = ImageTrafo.inverse trafo let img = PixImage<'T>(fmt, s) let local = unbox<PixImage<'T>>(img.Transformed inv) action local @@ -507,7 +487,8 @@ and [<AbstractClass; Sealed; Extension>] PixImageSharp private() = try let info = Image.Identify stream let trafo = getImageTrafo info - PixImageInfo(PixFormat.ByteRGBA, getSize trafo info.Width info.Height) + let size = trafo |> ImageTrafo.transformSize (V2i(info.Width, info.Height)) + PixImageInfo(PixFormat.ByteRGBA, size) with _ -> null @@ -548,21 +529,9 @@ and [<AbstractClass; Sealed; Extension>] PixImageSharp private() = | None -> if make.ToLower().Contains "canon" then 1.6 else 1.5 - let trafo = getImageTrafo info - - let mutable size = V2i(info.Width, info.Height) - match trafo with - | ImageTrafo.Transpose - | ImageTrafo.Transverse - | ImageTrafo.Rot90 - | ImageTrafo.Rot270 -> - size <- V2i(size.Y, size.X) - | _ -> - () - try return { - size = size + size = info |> getImageTrafo |> ImageTrafo.transformSize (V2i(info.Width, info.Height)) cropFactor = crop make = make.Trim() model = model.Trim()