Skip to content

Commit 4fa141c

Browse files
committed
fix cropping images not correctly setting new width and height to dat g1 element
1 parent 16ddf34 commit 4fa141c

2 files changed

Lines changed: 16 additions & 11 deletions

File tree

Gui/ViewModels/Graphics/ImageTableViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ private void RecreateViewModelGroupsFromImageTable(ImageTable imageTable)
199199
GroupedImageViewModels.Clear();
200200
foreach (var group in imageTable.Groups)
201201
{
202-
var givm = new GroupedImageViewModel(group.Name, group.GraphicsElements.Select(ge => new ImageViewModel(ge)));
202+
var givm = new GroupedImageViewModel(group.Name, group.GraphicsElements.Select(ge => new ImageViewModel(ge, Model.PaletteMap)));
203203
givm.SelectionModel.SelectionChanged += SelectionChanged;
204204
GroupedImageViewModels.Add(givm);
205205
}

Gui/ViewModels/Graphics/ImageViewModel.cs

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)