diff --git a/NHSE.Sprites/Field/FieldItemSpriteDrawer.cs b/NHSE.Sprites/Field/FieldItemSpriteDrawer.cs index f61ae58..079bda7 100644 --- a/NHSE.Sprites/Field/FieldItemSpriteDrawer.cs +++ b/NHSE.Sprites/Field/FieldItemSpriteDrawer.cs @@ -1,6 +1,4 @@ using System.Drawing; -using System.Drawing.Imaging; -using System.Runtime.InteropServices; using NHSE.Core; namespace NHSE.Sprites @@ -30,11 +28,7 @@ public Bitmap GetBitmapLayer(FieldItemLayer layer) } } - var result = new Bitmap(width, height, PixelFormat.Format32bppArgb); - var bData = result.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); - Marshal.Copy(bmpData, 0, bData.Scan0, bmpData.Length); - result.UnlockBits(bData); - return result; + return ImageUtil.GetBitmap(bmpData, width, height); } private static int[] GetBitmapLayerAcre(FieldItemLayer layer, int x0, int y0, out int width, out int height) @@ -62,13 +56,19 @@ private static int[] GetBitmapLayerAcre(FieldItemLayer layer, int x0, int y0, ou public Bitmap GetBitmapLayerAcre(FieldItemLayer layer, int x0, int y0, int scale) { var map = GetBitmapLayerAcre(layer, x0, y0, out int mh, out int mw); - var data = ImageUtil.ScalePixelImage(map, scale, mw, mh, out var fw, out var fh); + var data = ImageUtil.ScalePixelImage(map, scale, mw, mh, out var w, out var h); // draw symbols over special items now? // Slap on a grid - var w = fw; - var h = fh; + DrawGrid(data, w, h, scale); + + // Return final data + return ImageUtil.GetBitmap(data, w, h); + } + + private static void DrawGrid(int[] data, int w, int h, int scale) + { const int grid = -0x777778; // 0xFF888888u // Horizontal Lines @@ -90,9 +90,6 @@ public Bitmap GetBitmapLayerAcre(FieldItemLayer layer, int x0, int y0, int scale data[index] = grid; } } - - // Return final data - return ImageUtil.GetBitmap(data, fw, fh); } public Bitmap GetBitmapLayer(FieldItemLayer layer, int x, int y, int scale = 1) diff --git a/NHSE.Sprites/Util/ImageUtil.cs b/NHSE.Sprites/Util/ImageUtil.cs index 543cc0b..c23940e 100644 --- a/NHSE.Sprites/Util/ImageUtil.cs +++ b/NHSE.Sprites/Util/ImageUtil.cs @@ -71,13 +71,17 @@ public static int[] ScalePixelImage(int[] data, int scale, int w, int h, out int // For each pixel, copy to the X indexes, then block copy the row to the other rows. for (int y = 0, i = 0; y < fH; y += scale) { + // Fill the X pixels var baseIndex = y * fW; for (int x = 0; x < fW; x += scale, i++) { + var v = data[i]; + var xi = baseIndex + x; for (int x1 = 0; x1 < scale; x1++) - scaled[baseIndex + x + x1] = data[i]; + scaled[xi + x1] = v; } + // Copy entire pixel row down for (int y1 = 1; y1 < scale; y1++) Array.Copy(scaled, baseIndex, scaled, baseIndex + (y1 * fW), fW); }