From 55f2597225984bc11ef71834008f3ffc0576e8d1 Mon Sep 17 00:00:00 2001 From: EyKettle <95554047+EyKettle@users.noreply.github.com> Date: Fri, 24 Nov 2023 21:46:33 +0800 Subject: [PATCH 1/2] Add files via upload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增了实现更好的层级显示的皮肤裁切方法 --- SkinResolver.cs | 137 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) diff --git a/SkinResolver.cs b/SkinResolver.cs index 5ce089c..5dfedf3 100644 --- a/SkinResolver.cs +++ b/SkinResolver.cs @@ -158,6 +158,143 @@ private Image CopyBitmap(Image image) { } return tmp; + } + + public Image CropDoubleSkinOverview(bool IsSlim = false, int ArmAngle = 8, int ArmShrinkPx = 6, int ScaleSize = 8) + { + var head = CropDoubleSkinHead(ScaleSize); + var body = CropDoubleSkinBody(ScaleSize); + var leftArm = CropDoubleSkinLeftArm(IsSlim, ScaleSize); + var rightArm = CropDoubleSkinRightArm(IsSlim, ScaleSize); + var leftLeg = CropDoubleSkinLeftLeg(ScaleSize); + var rightLeg = CropDoubleSkinRightLeg(ScaleSize); + + Image skin = new(264 * ScaleSize, 264 * ScaleSize); + leftArm.Mutate(x => x.Rotate(-ArmAngle)); + rightArm.Mutate(x => x.Rotate(ArmAngle)); + skin.Mutate(x => x.DrawImage(leftLeg, new Point(128 * ScaleSize, 160 * ScaleSize), 1f)); + skin.Mutate(x => x.DrawImage(rightLeg, new Point(96 * ScaleSize, 160 * ScaleSize), 1f)); + skin.Mutate(x => x.DrawImage(leftArm, new Point((160 - ArmShrinkPx) * ScaleSize, 64 * ScaleSize), 1f)); + skin.Mutate(x => x.DrawImage(rightArm, new Point((IsSlim ? (104 + ArmShrinkPx) : (112 + ArmShrinkPx)) * ScaleSize - rightArm.Width, 64 * ScaleSize), 1f)); + skin.Mutate(x => x.DrawImage(body, new Point(96 * ScaleSize, 64 * ScaleSize), 1f)); + skin.Mutate(x => x.DrawImage(head, new Point(96 * ScaleSize, 0), 1f)); + head.Dispose(); + body.Dispose(); + leftArm.Dispose(); + rightArm.Dispose(); + leftLeg.Dispose(); + rightLeg.Dispose(); + + return skin; + } + public Image CropDoubleSkinHead(int ScaleSize = 8) + { + Image innerHead = ImageHelper.ConvertToImage(ImageBytes); + Image outerHead = ImageHelper.ConvertToImage(ImageBytes); + innerHead.Mutate(x => x.Crop(new(8, 8, 8, 8))); + innerHead.Mutate(x => x.Resize(64, 64, KnownResamplers.NearestNeighbor)); + outerHead.Mutate(x => x.Crop(new(40, 8, 8, 8))); + outerHead.Mutate(x => x.Resize(72, 72, KnownResamplers.NearestNeighbor)); + Image head = new(72, 72); + head.Mutate(x => x.DrawImage(innerHead, new Point(4, 4), 1f)); + head.Mutate(x => x.DrawImage(outerHead, new Point(0, 0), 1f)); + innerHead.Dispose(); + outerHead.Dispose(); + + head.Mutate(x => x.Resize(head.Width * ScaleSize, head.Height * ScaleSize, KnownResamplers.NearestNeighbor)); + + return head; + } + public Image CropDoubleSkinBody(int ScaleSize = 8) + { + Image innerBody = ImageHelper.ConvertToImage(ImageBytes); + Image outerBody = ImageHelper.ConvertToImage(ImageBytes); + innerBody.Mutate(x => x.Crop(new(20, 20, 8, 12))); + innerBody.Mutate(x => x.Resize(64, 96, KnownResamplers.NearestNeighbor)); + outerBody.Mutate(x => x.Crop(new(20, 36, 8, 12))); + outerBody.Mutate(x => x.Resize(72, 104, KnownResamplers.NearestNeighbor)); + Image body = new(72, 104); + body.Mutate(x => x.DrawImage(innerBody, new Point(4, 4), 1f)); + body.Mutate(x => x.DrawImage(outerBody, new Point(0, 0), 1f)); + innerBody.Dispose(); + outerBody.Dispose(); + + body.Mutate(x => x.Resize(body.Width * ScaleSize, body.Height * ScaleSize, KnownResamplers.NearestNeighbor)); + + return body; + } + public Image CropDoubleSkinLeftArm(bool IsSlim = false, int ScaleSize = 8) + { + Image innerLeftArm = ImageHelper.ConvertToImage(ImageBytes); + Image outerLeftArm = ImageHelper.ConvertToImage(ImageBytes); + innerLeftArm.Mutate(x => x.Crop(new(36, 52, IsSlim ? 3 : 4, 12))); + outerLeftArm.Mutate(x => x.Crop(new(52, 52, IsSlim ? 3 : 4, 12))); + innerLeftArm.Mutate(x => x.Resize(IsSlim ? 24 : 32, 96, KnownResamplers.NearestNeighbor)); + outerLeftArm.Mutate(x => x.Resize(IsSlim ? 32 : 40, 104, KnownResamplers.NearestNeighbor)); + Image leftArm = new(IsSlim ? 32 : 40, 104); + leftArm.Mutate(x => x.DrawImage(innerLeftArm, new Point(4, 4), 1f)); + leftArm.Mutate(x => x.DrawImage(outerLeftArm, new Point(0, 0), 1f)); + innerLeftArm.Dispose(); + outerLeftArm.Dispose(); + + leftArm.Mutate(x => x.Resize(leftArm.Width * ScaleSize, leftArm.Height * ScaleSize, KnownResamplers.NearestNeighbor)); + + return leftArm; + } + public Image CropDoubleSkinRightArm(bool IsSlim = false, int ScaleSize = 8) + { + Image innerRightArm = ImageHelper.ConvertToImage(ImageBytes); + Image outerRightArm = ImageHelper.ConvertToImage(ImageBytes); + innerRightArm.Mutate(x => x.Crop(new(44, 20, IsSlim ? 3 : 4, 12))); + outerRightArm.Mutate(x => x.Crop(new(44, 36, IsSlim ? 3 : 4, 12))); + innerRightArm.Mutate(x => x.Resize(IsSlim ? 24 : 32, 96, KnownResamplers.NearestNeighbor)); + outerRightArm.Mutate(x => x.Resize(IsSlim ? 32 : 40, 104, KnownResamplers.NearestNeighbor)); + Image rightArm = new(IsSlim ? 32 : 40, 104); + rightArm.Mutate(x => x.DrawImage(innerRightArm, new Point(4, 4), 1f)); + rightArm.Mutate(x => x.DrawImage(outerRightArm, new Point(0, 0), 1f)); + innerRightArm.Dispose(); + outerRightArm.Dispose(); + + rightArm.Mutate(x => x.Resize(rightArm.Width * ScaleSize, rightArm.Height * ScaleSize, KnownResamplers.NearestNeighbor)); + + return rightArm; + } + public Image CropDoubleSkinLeftLeg(int ScaleSize = 8) + { + Image innerLeftLeg = ImageHelper.ConvertToImage(ImageBytes); + Image outerLeftLeg = ImageHelper.ConvertToImage(ImageBytes); + innerLeftLeg.Mutate(x => x.Crop(new(20, 52, 4, 12))); + outerLeftLeg.Mutate(x => x.Crop(new(4, 52, 4, 12))); + innerLeftLeg.Mutate(x => x.Resize(32, 96, KnownResamplers.NearestNeighbor)); + outerLeftLeg.Mutate(x => x.Resize(40, 104, KnownResamplers.NearestNeighbor)); + Image leftLeg = new(40, 104); + leftLeg.Mutate(x => x.DrawImage(innerLeftLeg, new Point(4, 4), 1f)); + leftLeg.Mutate(x => x.DrawImage(outerLeftLeg, new Point(0, 0), 1f)); + innerLeftLeg.Dispose(); + outerLeftLeg.Dispose(); + + leftLeg.Mutate(x => x.Resize(leftLeg.Width * ScaleSize, leftLeg.Height * ScaleSize, KnownResamplers.NearestNeighbor)); + + return leftLeg; + } + public Image CropDoubleSkinRightLeg(int ScaleSize = 8) + { + Image innerRightLeg = ImageHelper.ConvertToImage(ImageBytes); + Image outerRightLeg = ImageHelper.ConvertToImage(ImageBytes); + innerRightLeg.Mutate(x => x.Crop(new(4, 20, 4, 12))); + outerRightLeg.Mutate(x => x.Crop(new(4, 36, 4, 12))); + innerRightLeg.Mutate(x => x.Resize(32, 96, KnownResamplers.NearestNeighbor)); + outerRightLeg.Mutate(x => x.Resize(40, 104, KnownResamplers.NearestNeighbor)); + Image leftLeg = new(40, 104); + Image rightLeg = new(40, 104); + rightLeg.Mutate(x => x.DrawImage(innerRightLeg, new Point(4, 4), 1f)); + rightLeg.Mutate(x => x.DrawImage(outerRightLeg, new Point(0, 0), 1f)); + innerRightLeg.Dispose(); + outerRightLeg.Dispose(); + + rightLeg.Mutate(x => x.Resize(rightLeg.Width * ScaleSize, rightLeg.Height * ScaleSize, KnownResamplers.NearestNeighbor)); + + return rightLeg; } } } From ed9ca9708f2d1f2acec0cc9ed8f2df0df2f181a1 Mon Sep 17 00:00:00 2001 From: EyKettle <95554047+EyKettle@users.noreply.github.com> Date: Mon, 3 Feb 2025 20:53:55 +0800 Subject: [PATCH 2/2] =?UTF-8?q?Revert=20"=E6=96=B0=E5=A2=9E=E7=9A=AE?= =?UTF-8?q?=E8=82=A4=E5=A4=84=E7=90=86=E6=96=B9=E6=B3=95"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SkinResolver.cs | 137 ------------------------------------------------ 1 file changed, 137 deletions(-) diff --git a/SkinResolver.cs b/SkinResolver.cs index 5dfedf3..5ce089c 100644 --- a/SkinResolver.cs +++ b/SkinResolver.cs @@ -158,143 +158,6 @@ private Image CopyBitmap(Image image) { } return tmp; - } - - public Image CropDoubleSkinOverview(bool IsSlim = false, int ArmAngle = 8, int ArmShrinkPx = 6, int ScaleSize = 8) - { - var head = CropDoubleSkinHead(ScaleSize); - var body = CropDoubleSkinBody(ScaleSize); - var leftArm = CropDoubleSkinLeftArm(IsSlim, ScaleSize); - var rightArm = CropDoubleSkinRightArm(IsSlim, ScaleSize); - var leftLeg = CropDoubleSkinLeftLeg(ScaleSize); - var rightLeg = CropDoubleSkinRightLeg(ScaleSize); - - Image skin = new(264 * ScaleSize, 264 * ScaleSize); - leftArm.Mutate(x => x.Rotate(-ArmAngle)); - rightArm.Mutate(x => x.Rotate(ArmAngle)); - skin.Mutate(x => x.DrawImage(leftLeg, new Point(128 * ScaleSize, 160 * ScaleSize), 1f)); - skin.Mutate(x => x.DrawImage(rightLeg, new Point(96 * ScaleSize, 160 * ScaleSize), 1f)); - skin.Mutate(x => x.DrawImage(leftArm, new Point((160 - ArmShrinkPx) * ScaleSize, 64 * ScaleSize), 1f)); - skin.Mutate(x => x.DrawImage(rightArm, new Point((IsSlim ? (104 + ArmShrinkPx) : (112 + ArmShrinkPx)) * ScaleSize - rightArm.Width, 64 * ScaleSize), 1f)); - skin.Mutate(x => x.DrawImage(body, new Point(96 * ScaleSize, 64 * ScaleSize), 1f)); - skin.Mutate(x => x.DrawImage(head, new Point(96 * ScaleSize, 0), 1f)); - head.Dispose(); - body.Dispose(); - leftArm.Dispose(); - rightArm.Dispose(); - leftLeg.Dispose(); - rightLeg.Dispose(); - - return skin; - } - public Image CropDoubleSkinHead(int ScaleSize = 8) - { - Image innerHead = ImageHelper.ConvertToImage(ImageBytes); - Image outerHead = ImageHelper.ConvertToImage(ImageBytes); - innerHead.Mutate(x => x.Crop(new(8, 8, 8, 8))); - innerHead.Mutate(x => x.Resize(64, 64, KnownResamplers.NearestNeighbor)); - outerHead.Mutate(x => x.Crop(new(40, 8, 8, 8))); - outerHead.Mutate(x => x.Resize(72, 72, KnownResamplers.NearestNeighbor)); - Image head = new(72, 72); - head.Mutate(x => x.DrawImage(innerHead, new Point(4, 4), 1f)); - head.Mutate(x => x.DrawImage(outerHead, new Point(0, 0), 1f)); - innerHead.Dispose(); - outerHead.Dispose(); - - head.Mutate(x => x.Resize(head.Width * ScaleSize, head.Height * ScaleSize, KnownResamplers.NearestNeighbor)); - - return head; - } - public Image CropDoubleSkinBody(int ScaleSize = 8) - { - Image innerBody = ImageHelper.ConvertToImage(ImageBytes); - Image outerBody = ImageHelper.ConvertToImage(ImageBytes); - innerBody.Mutate(x => x.Crop(new(20, 20, 8, 12))); - innerBody.Mutate(x => x.Resize(64, 96, KnownResamplers.NearestNeighbor)); - outerBody.Mutate(x => x.Crop(new(20, 36, 8, 12))); - outerBody.Mutate(x => x.Resize(72, 104, KnownResamplers.NearestNeighbor)); - Image body = new(72, 104); - body.Mutate(x => x.DrawImage(innerBody, new Point(4, 4), 1f)); - body.Mutate(x => x.DrawImage(outerBody, new Point(0, 0), 1f)); - innerBody.Dispose(); - outerBody.Dispose(); - - body.Mutate(x => x.Resize(body.Width * ScaleSize, body.Height * ScaleSize, KnownResamplers.NearestNeighbor)); - - return body; - } - public Image CropDoubleSkinLeftArm(bool IsSlim = false, int ScaleSize = 8) - { - Image innerLeftArm = ImageHelper.ConvertToImage(ImageBytes); - Image outerLeftArm = ImageHelper.ConvertToImage(ImageBytes); - innerLeftArm.Mutate(x => x.Crop(new(36, 52, IsSlim ? 3 : 4, 12))); - outerLeftArm.Mutate(x => x.Crop(new(52, 52, IsSlim ? 3 : 4, 12))); - innerLeftArm.Mutate(x => x.Resize(IsSlim ? 24 : 32, 96, KnownResamplers.NearestNeighbor)); - outerLeftArm.Mutate(x => x.Resize(IsSlim ? 32 : 40, 104, KnownResamplers.NearestNeighbor)); - Image leftArm = new(IsSlim ? 32 : 40, 104); - leftArm.Mutate(x => x.DrawImage(innerLeftArm, new Point(4, 4), 1f)); - leftArm.Mutate(x => x.DrawImage(outerLeftArm, new Point(0, 0), 1f)); - innerLeftArm.Dispose(); - outerLeftArm.Dispose(); - - leftArm.Mutate(x => x.Resize(leftArm.Width * ScaleSize, leftArm.Height * ScaleSize, KnownResamplers.NearestNeighbor)); - - return leftArm; - } - public Image CropDoubleSkinRightArm(bool IsSlim = false, int ScaleSize = 8) - { - Image innerRightArm = ImageHelper.ConvertToImage(ImageBytes); - Image outerRightArm = ImageHelper.ConvertToImage(ImageBytes); - innerRightArm.Mutate(x => x.Crop(new(44, 20, IsSlim ? 3 : 4, 12))); - outerRightArm.Mutate(x => x.Crop(new(44, 36, IsSlim ? 3 : 4, 12))); - innerRightArm.Mutate(x => x.Resize(IsSlim ? 24 : 32, 96, KnownResamplers.NearestNeighbor)); - outerRightArm.Mutate(x => x.Resize(IsSlim ? 32 : 40, 104, KnownResamplers.NearestNeighbor)); - Image rightArm = new(IsSlim ? 32 : 40, 104); - rightArm.Mutate(x => x.DrawImage(innerRightArm, new Point(4, 4), 1f)); - rightArm.Mutate(x => x.DrawImage(outerRightArm, new Point(0, 0), 1f)); - innerRightArm.Dispose(); - outerRightArm.Dispose(); - - rightArm.Mutate(x => x.Resize(rightArm.Width * ScaleSize, rightArm.Height * ScaleSize, KnownResamplers.NearestNeighbor)); - - return rightArm; - } - public Image CropDoubleSkinLeftLeg(int ScaleSize = 8) - { - Image innerLeftLeg = ImageHelper.ConvertToImage(ImageBytes); - Image outerLeftLeg = ImageHelper.ConvertToImage(ImageBytes); - innerLeftLeg.Mutate(x => x.Crop(new(20, 52, 4, 12))); - outerLeftLeg.Mutate(x => x.Crop(new(4, 52, 4, 12))); - innerLeftLeg.Mutate(x => x.Resize(32, 96, KnownResamplers.NearestNeighbor)); - outerLeftLeg.Mutate(x => x.Resize(40, 104, KnownResamplers.NearestNeighbor)); - Image leftLeg = new(40, 104); - leftLeg.Mutate(x => x.DrawImage(innerLeftLeg, new Point(4, 4), 1f)); - leftLeg.Mutate(x => x.DrawImage(outerLeftLeg, new Point(0, 0), 1f)); - innerLeftLeg.Dispose(); - outerLeftLeg.Dispose(); - - leftLeg.Mutate(x => x.Resize(leftLeg.Width * ScaleSize, leftLeg.Height * ScaleSize, KnownResamplers.NearestNeighbor)); - - return leftLeg; - } - public Image CropDoubleSkinRightLeg(int ScaleSize = 8) - { - Image innerRightLeg = ImageHelper.ConvertToImage(ImageBytes); - Image outerRightLeg = ImageHelper.ConvertToImage(ImageBytes); - innerRightLeg.Mutate(x => x.Crop(new(4, 20, 4, 12))); - outerRightLeg.Mutate(x => x.Crop(new(4, 36, 4, 12))); - innerRightLeg.Mutate(x => x.Resize(32, 96, KnownResamplers.NearestNeighbor)); - outerRightLeg.Mutate(x => x.Resize(40, 104, KnownResamplers.NearestNeighbor)); - Image leftLeg = new(40, 104); - Image rightLeg = new(40, 104); - rightLeg.Mutate(x => x.DrawImage(innerRightLeg, new Point(4, 4), 1f)); - rightLeg.Mutate(x => x.DrawImage(outerRightLeg, new Point(0, 0), 1f)); - innerRightLeg.Dispose(); - outerRightLeg.Dispose(); - - rightLeg.Mutate(x => x.Resize(rightLeg.Width * ScaleSize, rightLeg.Height * ScaleSize, KnownResamplers.NearestNeighbor)); - - return rightLeg; } } }