Minor clean

Reduce array get counts by 16 (from 17->1)
This commit is contained in:
Kurt
2020-04-08 17:13:00 -07:00
parent 8469e12c38
commit 557a34edbc
2 changed files with 15 additions and 14 deletions

View File

@@ -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)

View File

@@ -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);
}