Visual Basic.Net
- Код: Выделить всё
Public Class bmpParser
Private m_images(,) As Bitmap
Private m_bmp As Bitmap
Private m_imgSize As Size
''' <summary>
''' Создает инстанс класса
''' </summary>
''' <param name="bmpSource">Картинка - источник</param>
''' <param name="DestinationImagesSize">Размер конечных картинок</param>
''' <param name="TransparencyKey">Прозрачный увет</param>
Public Sub New(ByVal bmpSource As Bitmap, ByVal DestinationImagesSize As Size, ByVal TransparencyKey As Color)
m_bmp = bmpSource
m_imgSize = DestinationImagesSize
m_bmp.MakeTransparent(TransparencyKey)
parseBitmap()
End Sub
''' <summary>
''' Возвращает коллекцию картинок
''' </summary>
Public ReadOnly Property Images() As Bitmap(,)
Get
Return m_images
End Get
End Property
''' <summary>
''' Метод разбивает картинку на несколько картинок поменьше
''' </summary>
Private Sub parseBitmap()
'Высчитываем какого размера должен получиться масив, и инициализируем его
m_images = Array.CreateInstance(GetType(Bitmap), CLng(m_bmp.Width / m_imgSize.Width), CLng(m_bmp.Height / m_imgSize.Height))
Dim h As Integer = 0 'счетчик для массива
Dim y As Integer
Dim x As Integer
For y = 0 To m_bmp.Height - 1 Step m_imgSize.Height 'В цыкле проходим от по координтае X
Dim w As Integer = 0 'счетчик для массива
For x = 0 To m_bmp.Width - 1 Step m_imgSize.Width 'В цыкле проходим от по координтае X
'Прямоугольник, который будет скопирован (т.е. еще одна новая картинка)
Dim rect As New Rectangle(x, y, m_imgSize.Width, m_imgSize.Height)
'Собственно копирование и запись результата в ячейку массива
m_images(w, h) = m_bmp.Clone(rect, System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
w += 1 'увеличение счетчиков массива
Next x
h += 1 'увеличение счетчиков массива
Next y
End Sub
End Class
C#
- Код: Выделить всё
public class bmpParser
{
private Bitmap[,] m_images;
private Bitmap m_bmp;
private Size m_imgSize;
/// <summary>
/// Создает инстанс класса
/// </summary>
/// <param name="bmpSource">Картинка - источник</param>
/// <param name="DestinationImagesSize">Размер конечных картинок</param>
/// <param name="TransparencyKey">Прозрачный увет</param>
public bmpParser(Bitmap bmpSource, Size DestinationImagesSize, Color TransparencyKey)
{
m_bmp = bmpSource;
m_imgSize = DestinationImagesSize;
m_bmp.MakeTransparent(TransparencyKey);
parseBitmap();
}
/// <summary>
/// Возвращает коллекцию картинок
/// </summary>
public Bitmap[,] Images
{
get
{
return m_images;
}
}
/// <summary>
/// Метод разбивает картинку на несколько картинок поменьше
/// </summary>
private void parseBitmap()
{
//Высчитываем какого размера должен получиться масив, и инициализируем его
m_images = new Bitmap[m_bmp.Width / m_imgSize.Width, m_bmp.Height / m_imgSize.Height];
int h = 0; //счетчик для массива
for (int y = 0; y < m_bmp.Height; y += m_imgSize.Height)//В цыкле проходим от по координтае X
{
int w = 0; //счетчик для массива
for (int x = 0; x < m_bmp.Width; x += m_imgSize.Width)//В цыкле проходим от по координтае X
{
//Прямоугольник, который будет скопирован (т.е. еще одна новая картинка)
Rectangle rect = new Rectangle(x, y, m_imgSize.Width, m_imgSize.Height);
//Собственно копирование и запись результата в ячейку массива
m_images[w, h] = m_bmp.Clone(rect, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
w++; //увеличение счетчиков массива
}
h++; //увеличение счетчиков массива
}
}
}
изначально писал на шарпе, потом на бейсик переводил.
использование
C#
- Код: Выделить всё
public Form1()
{
InitializeComponent();
bmpParser parser = new bmpParser(testBmpParser.Properties.Resources.all, new Size(16, 16), Color.Fuchsia);
foreach (Bitmap bmp in parser.Images)
{
PictureBox pictBox = new PictureBox();
pictBox.Size = new Size(16, 16);
pictBox.BackgroundImage = bmp;
pictBox.BackgroundImageLayout = ImageLayout.Center;
pnlPictures.Controls.Add(pictBox);
}
}
Отлов ошибок за вами, мне не нужно было