- (Change) Use NuGet mini runtimes for Windows, macOS, Ubuntu 24.04 x64 and Debian 13 (Trixie) ARM64, with custom
cvextern overrides from build/platforms when available. - (Fix) Anycubic PWSZ: saved files could be rejected by Photon Workshop because optional resin names
were added to legacy user resins; omit absent names and preserve existing values (#1155). - (Fix) Convert: thumbnails are now matched to the target format by size instead of by order, formats that list
the largest thumbnail first (CTB, Chitubox ZIP, PHZ, ...) swapped the small and large previews when converted to
formats that list the smallest first (GR1, GOO, CXDLP, ...), shrinking the large one and upscaling the small one
(#1121). - (Fix) Anycubic ZIP formats (PWSZ and PW0 layers): opening high resolution files could fail with "Failed to allocate"
because every decoded layer image was kept in memory until the garbage collector freed it. - (Fix) Image formats: saving leaked one layer image per save.
- (Fix) LGS: saving a file without a thumbnail leaked the generated preview image.
- (Improvement) Layer preview: rotate and mirror are now applied when drawing instead of rotating and flipping the full
resolution layer image on every change, which is faster on high resolutions. Rotating keeps the zoom and the view
centered on the same spot of the layer instead of zooming to fit, it still zooms to fit when the whole layer was in
view. - (Add) Layer preview: "Real aspect ratio" toggle on the toolbar, and its "Real aspect ratio on load" setting, to show
the layer with the physical proportions of the printer pixels, printers with non-square LCD pixels, for example the
Halot Mage S, looked stretched. It is enabled by default and view only, the layer image is never resized (#918). - (Improvement) Layer preview: the crosshairs, the print volume, layer and contour bounds, the enclosing circles, the
centroids and the triangles count are now drawn as vectors over the layer image instead of into it, they are crisp at
any zoom, their text stays upright when the preview is rotated, and toggling them or zooming across the crosshair fade
level no longer renders the layer image again. Their thickness and diameter settings are now in screen pixels, scaled
to half of the value (at least 1) which is the same as before at 50% zoom. - (Improvement) Layer preview: the layer bitmap is reused while the layer resolution doesn't change instead of
allocating a new one for every layer, which is faster and reduces the memory churn on high resolution layers. - (Improvement) Layer preview: layers with nothing to color (no issues, difference, outlines, masks or pixel editor
operations on the layer) are displayed as the 8-bit image they are, instead of being expanded to a 32-bit image
and bitmap. On a 13312x5120 layer it needs 142 MB instead of 598 MB, and changing the layer takes about 8 ms instead
of 29 ms. Layers with colored pixels still use the 32-bit image, and the pixel editor always does. - (Add) Layer preview: "Layer image sampling" setting (Auto, Nearest, Smooth), Auto is the default. Zoomed out, the
layer is now drawn averaged instead of skipping pixels, which removed the aliasing and the shimmering of high
resolution layers when panning or scrolling the layers. It is still sharp pixels when zoomed in. Choose Nearest to
get the previous look. - (Add) Layer preview: the layer difference (difference, similarity and onion skin) is drawn by the GPU ("GPU
rendering" in the Difference menu, and a setting, on by default). The previous and next layers are drawn over the
layer as tinted layers by the layer image box, which keeps the layer as the 8-bit image it is, instead of the CPU
mixing the layers into a 32-bit image. The difference is the same as the CPU version; in the similarity the
anti-aliased pixels of the other layers blend with the layer instead of replacing it; in the onion skin the ghosts
have the same colors and priority, but the current layer is always white: there is no yellow for pixels without a
layer below and no magenta for cavities. The exact CPU version is used whenever the layer has something else to
color, like issues, or when the setting is off. - (Add) Layer preview: onion skin with 7 layers (-3 to +3) [6 ghosts], the layer +3 is drawn in dark blue.
- (Add) Layer preview: compare mode ("Compare" on the toolbar), the current layer is shown on the left of a split line
that is dragged with the mouse, and on its right the layer below or above, 10 layers below or above, or the same
layer before the last operation, from the undo history, to see what the operation changed. - (Add) Layer preview: rulers (toolbar toggle and setting, off by default) and a scale bar (toolbar toggle and setting,
on by default) in millimeters, from the display size and the resolution of the file. The rulers are drawn over the
layer along the top and left edges, with round steps that adapt to the zoom, upright labels and a mark that follows
the pointer. They show the position of the layer pixels along the axes of the screen from the top-left pixel of the
layer, also when the preview is rotated or flipped. - (Add) Layer preview: minimap (toolbar toggle and setting, on by default) in the bottom right corner, a thumbnail of
the whole layer with the visible part marked, shown only while the layer is zoomed in. Click or drag on it to move
the view. Its size and corner, and the corner of the scale bar, are set in the settings. - (Change) Layer preview: the cross-section and peel curve HUD moved to the top right corner, so it doesn't cover the
minimap and the scale bar, and its shortcut is now [P] because [A] also pans the layer to the left. - (Fix) Cross-section and peel curve HUD: in the layer preview it showed "No slice area data available" until the 3D
preview was opened, the layer areas are now calculated when the HUD is shown and again when the layers change. - (Fix) Cross-section and peel curve HUD: files without lift speeds and heights per layer now use the global bottom
and normal values for the peel force, instead of empty layer values. The lift values are refreshed when the lift
settings or the layers change. - (Fix) Layer preview: the triangulate outline drew triangles over the empty areas of concave shapes and holes,
now only the triangles inside the lit pixels are drawn and counted. The triangle count is shown in a fixed label at
the top of the layer preview instead of on the layer image, so it is visible at any zoom, rotation and flip. - (Improvement) Layer preview: [Q] and [E] change the layer when the key is pressed instead of released, and repeat
while the key is held, like the arrow keys. - (Add) Layer preview: pinch to zoom around the fingers with a two finger pan, and the magnify gesture of touchpads (
"Touch and touchpad gestures" setting, on by default). The mouse is not affected. - AdvancedImageBox
- (Add)
PixelAspectRatioproperty to show images with non-square pixels, the image is stretched vertically when
drawing without being resampled, with theZoomFactorXandZoomFactorYproperties that are the zoom factor of
each axis. TheZoomFactoris the same asZoomFactorX(#918). - (Add)
ImageRotation,FlipHorizontalandFlipVerticalproperties to display the image rotated in steps of 90
degrees and mirrored, without modifying or processing it. The image is flipped first and then rotated. The
coordinates of the control (PointToImage,GetOffsetPoint,CenterAt,ZoomToRegion,SelectionRegion, ...)
stay in pixels of the source image,PixelAspectRatiodescribes the source pixels, and theTrackerImageis
transformed like the image.GetSelectedBitmap(true)returns the selection as it is displayed. - (Add)
Overlayscollection to draw vector items over the image:ImageBoxLineOverlay,ImageBoxRectangleOverlay,
ImageBoxEllipseOverlay,ImageBoxPolylineOverlay(polygon when closed),ImageBoxMarkerOverlayand
ImageBoxTextOverlay. The geometry is in pixels of the source image and follows the zoom, the scroll, the rotation,
the flips and thePixelAspectRatioexactly like the image, while the stroke thickness, the marker size and the
font size are in screen pixels and stay the same at any zoom, and the text is always upright. They have a stroke, an
optional fill,OpacityandIsVisible, changing them redraws the control,ReplaceAll()andAddRange()redraw
once, the items outside of the viewport are skipped, andShowOverlayshides them all. - (Add)
InvalidateImage()method to redraw the control after the pixels of the sameImagebitmap were modified in
place, which raises no change, without touching the zoom, the scroll position or the centering. - (Add)
BitmapSamplingModeproperty (Nearestby default,AutoandSmooth) to draw a zoomed out image averaged
instead of aliased. AWriteableBitmapis reduced by powers of two once for each content, about 15 ms for
13312x5120 BGRA, and the reduction is drawn, so panning and zooming cost the same as nearest sampling, while
Avalonia's high quality interpolation takes about 50 ms for every frame. CallInvalidateImage()after changing
the pixels. - (Add)
GrayscaleImageproperty andGrayscaleImageclass to display an 8-bit image without expanding it to 32-bit
(a quarter of the memory and of the copy), with an optional 256 entry color map (SetColorMap) applied when
drawing. All the features work with it,GetSelectedBitmap()returns the colored selection. It is drawn with
Skia, falling back to a 32-bit copy for other render backends. Needs the Avalonia.Skia package to be drawn with
Skia, it is referenced by the control only to build, so it is not a new dependency of the NuGet package. - (Add)
CompositeLayerscollection to draw more images over or under the main one with the same transform and the
same sampling, with their own cached reductions when zoomed out:ImageBoxCompositeLayerwith aGrayscaleImageor
aBitmap,Tint,Opacity,Placement(AboveorBelow),Blend(Normal,Plus,Screen,Multiply,
Lighten,Darken) andAlpha(Luminanceuses the pixel values as alpha with the tint as color, which is what
an onion skin needs). A grayscale layer is tinted by Skia without leaving 8-bit, a bitmap supports the opacity and
the blend modes only. Nothing changes without layers. - (Add)
CompareSplitPositionproperty (nullby default) to draw a vertical split over the image where the
composite layers with aCompareSideofLeftorRightare drawn on their side of it, which the user drags with
the mouse or a finger. - (Add)
ShowRulersandShowScaleBarproperties (off by default) to draw rulers and a scale bar in physical units,
with thePixelWidth,PixelHeight(the size of one pixel of the source image, 0 shows pixels) andUnitName
("mm") properties,RulerSize,RulerBackground,RulerForegroundandScaleBarCorner. The rulers are drawn over
the viewport, they don't change the viewport nor any coordinate, and they show the coordinates of the source image
along the axes of the screen, from its top-left pixel, whatever the rotation and the flips.PixelAspectRatiois
independent of the pixel size. - (Add)
ShowMinimapproperty (off by default) to draw a thumbnail of the whole image with the visible part marked
in a corner of the viewport while the image is zoomed in, with theMinimapCorner,MinimapSize,MinimapOpacity
andMinimapViewportColorproperties. Clicking or dragging on it centers the view, without starting a pan or a
selection and without reaching the pointer events of the control. - (Add)
MinimapBoundsandScaleBarBoundsproperties with the bounds of the minimap and of the scale bar in the
control, empty when they are not shown, to place other elements over the control without covering them. - (Add)
EnableTouchGesturesproperty (on by default) to zoom with the pinch gesture around the fingers, panning with
them, and with the magnify gesture of touchpads, respecting the zoom limits. The mouse is not affected.
- (Add)
- (Upgrade) EmguCV to 5.0.0
- (Upgrade) AvaloniaUI from 12.1.3 to 12.1.4