Kasthuri Gunabalasingam Ответов: 3

Разделите изображение на несколько блоков 8*8 в C#


Пожалуйста, ant one предлагает идею разделить изображение на несколько плиток 8*8 в C#.
Я попробовал несколько способов, но не смог получить никаких идей.

Спасибо в Adavnce

Kenneth Haugland

Покажи нам какой-нибудь код, который ты пробовал, но потерпел неудачу?

BillWoodruff

разделить на единицы чего ? 8 пикселей, 8 ?

3 Ответов

Рейтинг:
2

F-ES Sitecore

Я удивлен, что вы не могли получить ни малейшего представления, я погуглил "обрезать изображение c#" и нашел много примеров кода.

обрезка изображения с# [^]


Рейтинг:
2

Perić Željko

Привет Кастури,
Я разработал простую игру-головоломку 3 x 3 slider, и вот метод, который должен дать вам представление о том, как разделить изображение на 3 x 3 плитки. Если вы проанализируете его, то не должно возникнуть проблем с изменением программного кода для разделения изображения на 8 х 8 плиток.

Оригинальная бесплатная программа, с открытым исходным кодом на этот URL адрес :
Игра Головоломка - Perić Željko Smederevo[^]

void Initialize_Tiles()
      {
          //
          // Cut original image to nine rectangular peaces
          // that have identical dimensions and set them to
          // the elements of table 'Puzzle_Tiles'.
          //
          // Placed by it's indexes on fixed positions
          // inside Puzzle_Table, in the below shown order,
          // they constitute original image.
          //
          //       1 2 3
          //       4 5 6
          //       7 8 9
          //

          // Original image
          Bitmap Original_Image;

          // Original image pixel format
          PixelFormat Pixel_Format;

          // Tile rectangle
          RectangleF Tile;

          int Tile_Height;// Tile height
          int Tile_Width; // Tile width

          // Set new original image and it's pixel format
          Original_Image = new Bitmap(BackgroundImage);
          Pixel_Format = Original_Image.PixelFormat;

          // Set new Tile
          Tile_Height = Original_Image.Height/3;
          Tile_Width = Original_Image.Width/3;

          Tile = new RectangleF();

          Tile.Width  = Tile_Width;
          Tile.Height = Tile_Height;

          //
          // Set values to elements of table Puzzle_Tiles
          //

          // 0. Tile, empty tile
          Puzzle_Tiles[0].Image = null;

          // 1. Tile
          Tile.X = 0;
          Tile.Y = 0;
          Puzzle_Tiles[1].Image = Original_Image.Clone(Tile,Pixel_Format);

          // 2. Tile
          Tile.X = Tile_Width;
          Tile.Y = 0;
          Puzzle_Tiles[2].Image = Original_Image.Clone(Tile,Pixel_Format);

          // 3. Tile
          Tile.X = 2*Tile_Width;
          Tile.Y = 0;
          Puzzle_Tiles[3].Image = Original_Image.Clone(Tile,Pixel_Format);

          // 4. Tile
          Tile.X = 0;
          Tile.Y = Tile_Height;
          Puzzle_Tiles[4].Image = Original_Image.Clone(Tile,Pixel_Format);

          // 5. Tile
          Tile.X = Tile_Width;
          Tile.Y = Tile_Height;
          Puzzle_Tiles[5].Image = Original_Image.Clone(Tile,Pixel_Format);

          // 6. Tile
          Tile.X = 2*Tile_Width;
          Tile.Y = Tile_Height;
          Puzzle_Tiles[6].Image = Original_Image.Clone(Tile,Pixel_Format);

          // 7. Tile
          Tile.X = 0;
          Tile.Y = 2*Tile_Height;
          Puzzle_Tiles[7].Image = Original_Image.Clone(Tile,Pixel_Format);

          // 8. Tile
          Tile.X = Tile_Width;
          Tile.Y = 2*Tile_Height;
          Puzzle_Tiles[8].Image = Original_Image.Clone(Tile,Pixel_Format);

          // 9. Tile
          Tile.X = 2*Tile_Width;
          Tile.Y = 2*Tile_Height;
          Puzzle_Tiles[9].Image = Original_Image.Clone(Tile,Pixel_Format);
      }


Как вы можете заметить, существует таблица Puzzle_Tiles, одномерный массив, тип PictureBox с его экземпляром Image, который используется для запоминания smaler peaces исходного изображения. Его объявление находится в начале основного класса и является глобальной переменной :

// Table 'Puzzle_Tiles'  contains nine
// pictures cropped from original image.
PictureBox [] Puzzle_Tiles;


И инициализация при методе Initialize_Tables см. исходный программный код при Игра Головоломка - Perić Željko Smederevo[^] :

int position;

// Table 'Puzzle_Tiles'  contains nine
// pictures cropped from original image.
Puzzle_Tiles = new PictureBox[10];
Puzzle_Tiles.Initialize();

// Set initial values for table elements
position = 0;
for(position=0;position<10;position++)
{
    Puzzle_Tiles[position] = new PictureBox();
    Puzzle_Tiles[position].Image = null;
}


Я думаю, что этого достаточно для вас, чтобы решить проблему.
Всего наилучшего,
Желько Перич


F-ES Sitecore

Проверьте, в каком году были опубликованы вопросы, прежде чем тратить слишком много времени и усилий на то, чтобы дать ответ!

Рейтинг:
1

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

Приведенные ниже ответы помогут вам.

1. Вырезать изображение в 9 ч#[^]
2. код для разбиения изображения на плитки равных размеров[^]