Разделение изображения во время выполнения - PullRequest
2 голосов
/ 27 апреля 2011

У меня есть изображение, подобное этому:

Я хочу получить его, чтобы использовать эти изображения для разных кнопок и других частей, не разбивая изображение самостоятельно.Я видел много игр и программ, которые делали это без необходимости делить их.Как бы я это сделал?Я использую VB.net, поэтому любые примеры .net приветствуются!

Вы можете увидеть пример здесь:

Это изображение используется как миникартав игре, в которую я играю, разные куски режутся во время выполнения.

Ответы [ 2 ]

2 голосов
/ 09 октября 2012

Вот как это сделать в 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);
                }
            }
        }
    }
}
2 голосов
/ 27 апреля 2011

Я не вижу возможности разделить изображение самостоятельно. Что-то должно извлечь эти отдельные изображения из полосы, чтобы вы могли использовать их независимо.

Вы, очевидно, обижаетесь на предложение (или даже расследование) любых альтернативных подходов, поэтомуДумаю, я пропущу эту часть моего ответа ...

Самый простой способ разбить это в .NET - это использовать Graphics класс .который оборачивает GDI + и предоставляет несколько полезных функций, связанных с рисованием.Наиболее важным здесь является DrawImage, который обеспечивает несколько различных перегрузок, которые позволяют вам указать размеры области внутри source изображения для рисования.Изменяя эти координаты, вы можете извлечь каждое из отдельных изображений в вашей полосе, нарисовав их в новый Bitmap.И когда у вас есть Bitmap, вы можете либо присвоить его элементу управления, сохранить его на диск или сделать с ним все, что захотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...