@@ -100,18 +100,25 @@ public Avalonia.Rect SelectedBitmapPreviewBorder
100100
101101 GraphicsElement Model { get ; init ; }
102102
103- public ImageViewModel ( GraphicsElement graphicsElement )
103+ public ImageViewModel ( GraphicsElement graphicsElement , PaletteMap paletteMap )
104104 {
105105 Model = graphicsElement ;
106+ UnderlyingImage = Model . Image ! ;
106107
107108 _ = this . WhenAnyValue ( o => o . UnderlyingImage )
108109 . Where ( x => x != null )
109- . Subscribe ( _ => DisplayedImage = UnderlyingImage ! . ToAvaloniaBitmap ( ) ) ;
110-
111- _ = this . WhenAnyValue ( o => o . DisplayedImage )
110+ . Subscribe ( _ =>
111+ {
112+ DisplayedImage = UnderlyingImage ! . ToAvaloniaBitmap ( ) ;
113+ this . RaisePropertyChanged ( nameof ( Width ) ) ;
114+ this . RaisePropertyChanged ( nameof ( Height ) ) ;
115+ Model . ImageData = paletteMap . ConvertRgba32ImageToG1Data ( UnderlyingImage , Flags ) ;
116+ Model . Width = ( short ) UnderlyingImage . Width ;
117+ Model . Height = ( short ) UnderlyingImage . Height ;
118+ } ) ;
119+
120+ _ = this . WhenAnyValue ( o => o . DisplayedImage , o => o . XOffset , o => o . YOffset , o => o . Width , o => o . Height )
112121 . Subscribe ( _ => this . RaisePropertyChanged ( nameof ( SelectedBitmapPreviewBorder ) ) ) ;
113-
114- UnderlyingImage = Model . Image ! ;
115122 }
116123
117124 public void RecolourImage ( ColourSwatch primary , ColourSwatch secondary , PaletteMap paletteMap )
@@ -147,19 +154,17 @@ public void CropImage()
147154
148155 if ( cropRegion . Width <= 0 || cropRegion . Height <= 0 )
149156 {
150- UnderlyingImage . Mutate ( i => i . Crop ( new Rectangle ( 0 , 0 , 1 , 1 ) ) ) ;
157+ UnderlyingImage = UnderlyingImage . Clone ( i => i . Crop ( new Rectangle ( 0 , 0 , 1 , 1 ) ) ) ;
151158 XOffset = 0 ;
152159 YOffset = 0 ;
153160 }
154161 else
155162 {
156- UnderlyingImage . Mutate ( i => i . Crop ( cropRegion ) ) ;
163+ UnderlyingImage = UnderlyingImage . Clone ( i => i . Crop ( cropRegion ) ) ;
157164 XOffset += ( short ) cropRegion . Left ;
158165 YOffset += ( short ) cropRegion . Top ;
159166 }
160167
161- this . RaisePropertyChanged ( nameof ( UnderlyingImage ) ) ;
162-
163168 static Rectangle FindCropRegion ( Image < Rgba32 > image )
164169 {
165170 var minX = image . Width ;
0 commit comments