我有一个像这样的图像:
我想拥有它,所以我可以将这些图像用于不同的按钮和其他部分,而无需自己分割图像。我已经看到很多游戏和程序都是这样做而不需要拆分它。我该怎么做?我正在使用VB.net,所以任何.net示例都很受欢迎!
你可以在这里看到一个例子:
此图像在我玩的游戏中用作小地图,不同的部分在运行时被剪切。
答案 0 :(得分:2)
我看不出自己分割图像的方法。 Something 必须从条带中提取这些单独的图像,以便您可以独立使用它们。
你显然对任何替代方法的建议(或甚至调查)都是冒犯的,所以我想我会跳过我的答案中的那部分......
在.NET中拆分它的最简单方法是使用Graphics
class。它包装了GDI +并提供了一些有用的绘图相关功能。这里最重要的是DrawImage
,它提供了几种不同的重载,允许您指定要从中绘制的 source 图像内的区域的尺寸。通过改变这些坐标,您可以通过将它们绘制到新的Bitmap
中来提取条带中的每个单独图像。一旦你拥有Bitmap
,就可以将其分配给控件,将其保存到磁盘,或者用它做任何你想做的事情。
答案 1 :(得分:2)
以下是如何在WPF中执行此操作:
using System.IO;
using System.Windows;
using System.Windows.Media.Imaging;
class Program
{
static void Main(string[] args)
{
var file = @"Imagestrip1600x16.png";
var output = @"IconsFolder";
using (Stream imageStreamSource = new FileStream(
file, FileMode.Open, FileAccess.Read, FileShare.Read))
{
PngBitmapDecoder decoder = new PngBitmapDecoder(
imageStreamSource,
BitmapCreateOptions.PreservePixelFormat,
BitmapCacheOption.Default);
BitmapSource bitmapSource = decoder.Frames[0];
for (int i = 0; i < bitmapSource.PixelWidth / 16; i++)
{
CroppedBitmap croppedBitmap = new CroppedBitmap(
bitmapSource,
new Int32Rect(i * 16, 0, 16, 16));
PngBitmapEncoder encoder = new PngBitmapEncoder();
var frame = BitmapFrame.Create(croppedBitmap);
encoder.Frames.Add(frame);
var fileName = Path.Combine(output, i.ToString() + ".png");
using (var stream = new FileStream(fileName, FileMode.Create))
{
encoder.Save(stream);
}
}
}
}
}