- using System;
- using Godot;
- using System.Collections.Generic;
-
- /// <summary>
- /// 液体笔刷数据
- /// </summary>
- public class BrushImageData
- {
- /// <summary>
- ///
- /// </summary>
- public int Width;
-
- public int Height;
- public BrushPixelData[] Pixels;
-
- //有效像素范围
- public int PixelMinX = int.MaxValue;
- public int PixelMinY = int.MaxValue;
- public int PixelMaxX;
- public int PixelMaxY;
-
- public int PixelWidth;
- public int PixelHeight;
-
- //补帧间距倍率
- public float Ffm;
-
- public BrushImageData(Image image, byte type, float ffm, float duration, float writeOffSpeed)
- {
- Ffm = ffm;
- var list = new List<BrushPixelData>();
- var width = image.GetWidth();
- var height = image.GetHeight();
- var flag = false;
- for (var x = 0; x < width; x++)
- {
- for (var y = 0; y < height; y++)
- {
- var pixel = image.GetPixel(x, y);
- if (pixel.A > 0)
- {
- flag = true;
- list.Add(new BrushPixelData()
- {
- X = x,
- Y = y,
- Color = pixel,
- Type = type,
- Duration = duration,
- WriteOffSpeed = writeOffSpeed
- });
- if (x < PixelMinX)
- {
- PixelMinX = x;
- }
- else if (x > PixelMaxX)
- {
- PixelMaxX = x;
- }
-
- if (y < PixelMinY)
- {
- PixelMinY = y;
- }
- else if (y > PixelMaxY)
- {
- PixelMaxY = y;
- }
- }
- }
- }
-
- if (!flag)
- {
- throw new Exception("不能使用完全透明的图片作为笔刷!");
- }
-
- Pixels = list.ToArray();
- Width = width;
- Height = height;
-
- PixelWidth = PixelMaxX - PixelMinX;
- PixelHeight = PixelMaxY - PixelMinY;
- }
- }