Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 11.05.2015
Сообщений: 4

Вывести изображение, обрезанное согласно двумерному массиву

11.05.2015, 23:10. Показов 825. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Итак, что дано:
PictureBox;
Bitmap;
Картинка для работы.
Что нужно :
Вывести изображение, обрезаное согласно 2-мерному массиву (т.е. "дырки" в изображении могут быть где угодно).
Делается все для игры Хоnix, в качестве альтернативы - можете посоветовать какой-то другой способ отрисовки игрового поля
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.05.2015, 23:10
Ответы с готовыми решениями:

По двумерному массиву массиву А получить одномерный массив В, присвоив его k-му элементу значение TRUE
По двумерному массиву массиву А получить одномерный массив В, присвоив его k-му элементу значение TRUE, если выполнено указанное ниже...

Передать в контроллер результат cropper (обрезанное изображение)
Есть cropper: var image = document.getElementById('cropImage'); if (cropper) {...

Результат по двумерному массиву вывести в одномерный
Программа в двумерном массиве находит индексы минимальных элементов по столбцам и перемножает их (индексы), это все работает, выводятся в...

7
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
12.05.2015, 10:45
Я думаю многие, в том числе я, не знают что такое игра Xonix, в гугле тоже не видно Поясните задачу полностью: что такое "дырки", каковы допустимые варианты, что с ними дальше должно делаться и тд.
0
0 / 0 / 0
Регистрация: 11.05.2015
Сообщений: 4
12.05.2015, 14:19  [ТС]
Xonix - игра, суть которой описана прямо на википедии. Как она не выходит в гугле - загадка.
https://www.google.com.ua/sear... CAYQ_AUoAQ
"Дырки", как должно стать ясно из скриншотов - некоторые части игрового поля, которые нужно заполнить. Допустимые варианты - тысячи их!
Задача полностью:
Есть два PictureBox'a, один - текстура травы (как земля, вменяемой текстуры именно земли не нашёл), второй, поверх него - текстура воды. Содержимое первого PictureBox'a выводится без всяких плясок,а вот второго - согласно 2-мерному массиву, а именно : там, где field[i,k]=0 - вода, field[i,k]=1 - трава, field[i,k]=2 - хвост точки, управляемой игроком. Беда в том, что я в упор не могу сделать "обрезку" изображения согласно данных в массиве.
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
12.05.2015, 21:06

Не по теме:

Сори за тупняк, я тупо скопипастил в гугл ваше название игры, а оно у вас с русской буквой:) Сейчас подумаю



Добавлено через 6 часов 22 минуты
Я бы делал примерно по такой логике:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
 
namespace WindowsFormsApplication30
{
    public partial class Form1 : Form
    {
        Innerfield inn;
 
         static Size blocksize = new Size(5,5); //размер минимального изменяемого блока пикселей
         static Size fieldsizesize = new Size(200, 220); //размер всей картинки
 
        //текстуры запихаете в эти битамапы
        Bitmap texturewater = new Bitmap(fieldsizesize.Width, fieldsizesize.Height); //вода
        Bitmap textureground = new Bitmap(fieldsizesize.Width, fieldsizesize.Height); //земля
        Bitmap texturecursor = new Bitmap(blocksize.Width, blocksize.Height); //точка
        public Form1()
        {
            InitializeComponent();
            inn = new Innerfield(new Size(pictureBox1.Width / blocksize.Width, pictureBox1.Height / blocksize.Height));
            inn.OnСhangeElement += new Innerfield.ElementChangedEvent(onElementChanged);
        }
 
 
        public void onElementChanged(int x, int y, int value)
        {
            Graphics dest = Graphics.FromImage(pictureBox1.Image);
             switch (value)
                    {
                        case 0:
                            dest.DrawImage(texturewater, new Rectangle(x * blocksize.Width, y * blocksize.Height, blocksize.Width, blocksize.Height), new Rectangle(x, y, blocksize.Width, blocksize.Height), GraphicsUnit.Pixel);
                                break;
                        case 1:
                                dest.DrawImage(textureground, new Rectangle(x * blocksize.Width, y * blocksize.Height, blocksize.Width, blocksize.Height), new Rectangle(x, y, blocksize.Width, blocksize.Height), GraphicsUnit.Pixel);
                                break;
                        case 2:
                                dest.DrawImage(texturecursor, new Rectangle(x * blocksize.Width, y * blocksize.Height, blocksize.Width, blocksize.Height), new Rectangle(0, 0, blocksize.Width, blocksize.Height), GraphicsUnit.Pixel);
                                break;
                    }
             pictureBox1.Invalidate();
        }
 
 
        private void pictureBox1_MouseMove(object sender, MouseEventArgs e) //вместо этого-любые событие
        {
            inn.ChangeElement(e.X / blocksize.Width, e.Y / blocksize.Height, 0); 
        }
 
    }
 
 
 
    class Innerfield
    {
        int[,] field;
        public delegate void ElementChangedEvent(int x, int y, int value);
        public event ElementChangedEvent OnСhangeElement;
 
        public Innerfield(Size pbSize)
        {
            if (pbSize != null)
            {
                field = new int[pbSize.Width, pbSize.Height];
            }
            else
            {
                throw new NullReferenceException();
            }
        }
 
        public void ChangeElement(int x, int y, int value)
        {
            if (value >= 0 && value <= 3 && x<field.GetLength(0) && y<field.GetLength(1))
            {
                field[x, y] = value;
                OnСhangeElement(x, y, value);
            }
            else
            {
                throw new ArgumentException();
            }
 
        }
    }
}
То есть рисовал на одном picturebox все, а массив убрал в отдельный класс с проверкой правильности и событием изменения.
1
0 / 0 / 0
Регистрация: 11.05.2015
Сообщений: 4
12.05.2015, 21:52  [ТС]
Спасибо, но вот вопрос :
EvilFromHell,
Цитата Сообщение от EvilFromHell Посмотреть сообщение
Innerfield inn;
А что это за строчка? Гугл не осиливает не под каким соусом.
0
Заблокирован
12.05.2015, 21:56
Цитата Сообщение от BBCCCCN Посмотреть сообщение
А что это за строчка? Гугл не осиливает не под каким соусом.
объявление переменной типа класса Innerfield описанного ниже в коде
1
0 / 0 / 0
Регистрация: 11.05.2015
Сообщений: 4
12.05.2015, 22:29  [ТС]
EvilFromHell, Ну и напоследок тогда ещё, с вашего позволения, частично оффтоп:
Куда мне впихнуть игровой цикл (т.е. цикл со всей логикой, которая нужна, и согласно которой будут перемещатся точки и регистрироватся события на игровом поле)?
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
12.05.2015, 22:52
EvilFromHell, Ну и напоследок тогда ещё, с вашего позволения, частично оффтоп:
Куда мне впихнуть игровой цикл (т.е. цикл со всей логикой, которая нужна, и согласно которой будут перемещатся точки и регистрироватся события на игровом поле)?
В класс Innerfield. Но не "впихнуть цикл" а нормально распределить всю логику по методам и свойствам
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.05.2015, 22:52
Помогаю со студенческими работами здесь

по двумерному массиву
Форумчане!!) помогите пожалуйста, очень прошу!)) Двумерный массив. вычислить: 1)сумму элементов в тех строках, которые не содержат...

Поиск по двумерному массиву
....JS первые сутки пытаюсь понять. Суть задачи: 1) Получить текущий год из системной даты. 2) Сравнить с значеними в массиве. 3)...

Задача по двумерному массиву
Доброго времени суток,сижу уже какой час да не могу решить задачу.Смог сделать только нули.Вот сама задача:Заполните квадратный массив...

Задача по двумерному массиву.
Задача: В двумерном массиве вычислить сумму элементов каждого столбца отдельно и так же отдельно вывести эти суммы на экран.Числа...

Задача по двумерному массиву
Создать матрицу B из целых чисел. Из каждой строки напечатать числа, которых нет в следующей строке. Числа эти записать построчно в новую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru