Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для Jesterru
3 / 2 / 2
Регистрация: 19.06.2016
Сообщений: 299

BitMap зарисовывается не полностью

02.02.2018, 09:26. Показов 724. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Написал программу, которая позволяет мне выбрать координаты, стоящие друг от друга на некотором расстоянии. Для наглядности решил выводить это все на PictureBox, но у меня появилась непонятная полоса справа и снизу. SizeMode = AutoScretch, вот код :
Кликните здесь для просмотра всего текста
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
bool[,] Field = new bool[10, 10];
List<int[]> Coords = new List<int[]>();
Random Rnd = new Random();
Bitmap BM = new Bitmap(10, 10);
public MainForm()
{
    InitializeComponent();
}
 
Bitmap Render(Bitmap Original)
{
    Bitmap Result = new Bitmap(PicBox.Width, PicBox.Height);
    using (Graphics Gr = Graphics.FromImage(Result))
    {
        Gr.SmoothingMode = SmoothingMode.HighSpeed;
        Gr.CompositingMode = CompositingMode.SourceCopy;
        Gr.InterpolationMode = InterpolationMode.NearestNeighbor;
        Gr.DrawImage(Original, new Rectangle(0, 0, PicBox.Width, PicBox.Height));
    }
    return Result;
}
 
private void Btn_OneFrame_Click(object sender, EventArgs e)
{
    for (int i = 0; i < 1; i++)
    {
        int[] Coord = new int[2];
        Coord[0] = Rnd.Next(10);
        Coord[1] = Rnd.Next(10);
 
        if (Field[Coord[0], Coord[1]] == false)
        {
            Coords.Add(Coord);
            Fill(Coord[0], Coord[1]);
        }
    }
 
    void Fill(int X, int Y)
            {
                for (int x = X - 2; x < X + 3; x++)
                {
                    for (int y = Y - 2; y < Y + 3; y++)
                    {
                        Check(x, y);
                    }
                }
 
 
                void Check(int PosX, int PosY)
                {
                    if (PosX < 10 && PosX >= 0 && PosY < 10 && PosY >= 0)
                        Field[PosX, PosY] = true;
                }
            }
 
    for (int x = 0; x < 10; x++)
    {
        for (int y = 0; y < 10; y++)
        {
            if(Field[x, y])
            {
                BM.SetPixel(x, y, Color.FromArgb(255, 255, 255));
            }
        }
    }
    for (int i = 0; i < Coords.Count; i++)
    {
        int[] Coord = Coords[i];
        BM.SetPixel(Coord[0], Coord[1], Color.FromArgb(255, 255, 0));
    }
    PicBox.Image = Render(BM);
}


Спасибо за помощь
Миниатюры
BitMap зарисовывается не полностью  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.02.2018, 09:26
Ответы с готовыми решениями:

создание Clone с Bitmap меньшего размера с сохранением изначальных габаритов Bitmap
Взялся за GDI, столкнулся с проблемой. Есть &quot;бегущая строка&quot;, она движется справа налево. Если перерисовывать по пикселям...

Как создать bitmap из области (по координатам пикселей) другого bitmap
Здравствуйте. Подскажите пожалуйста как создать bitmap из области(по координатам пикселей) другого bitmap. Вообщем обрезать.

Получение фото с веб камеры, занесение его в Bitmap и преобразование Bitmap в массив
В общем необходимо подключиться к веб камере сделать снимок и отправить его в сеть. Задачу я разделил на несколько этапов. 1. Сам...

7
 Аватар для Jesterru
3 / 2 / 2
Регистрация: 19.06.2016
Сообщений: 299
02.02.2018, 10:08  [ТС]
Подумал, что, возможно, вся проблема в методе Render. Для этого сделал генерацию нового Bitmapa размером с PictureBox, полосы остались

Добавлено через 2 минуты
Создал сразу же BitMap размером с пикче бокс, заполнил, все в порядке.
Вопрос остается открытым

Добавлено через 1 минуту
Выходит, что вся проблема кроется в изменении размера
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
02.02.2018, 10:12
Вы на битМапе рисуете, а затем отображаете это битмап PicBox.Image.

Возможно Ваш битмап меньше PicBox. Следовательно вопрос - в свойствах PicBox Вы указали как хотите отобразит битмап?
Может Вы меняете размер PicBox, в то время как битмап создан с боле меншими (старыми размерами) Width и Height?

Добавлено через 1 минуту
Jesterru, как вариант может Вам стоит в OnPaint отрисовки делать?
0
 Аватар для Jesterru
3 / 2 / 2
Регистрация: 19.06.2016
Сообщений: 299
02.02.2018, 10:42  [ТС]
Sanya_sa,
Цитата Сообщение от Sanya_sa Посмотреть сообщение
Может Вы меняете размер PicBox, в то время как битмап создан с боле меншими (старыми размерами) Width и Height?
Во время отрисовки размер PicBox'a не меняется. Я выяснил, что в этой проблеме виновато "Изменение размера Bitmap'a"

Цитата Сообщение от Sanya_sa Посмотреть сообщение
Возможно Ваш битмап меньше PicBox
У меня SizeMode = StretchImage, т.е. изображение растягивается, должно быть размером с PicBox

Добавлено через 21 секунду
Цитата Сообщение от Sanya_sa Посмотреть сообщение
как вариант может Вам стоит в OnPaint отрисовки делать
А чем это поможет? И что изменится?

Добавлено через 9 минут
Мда уж...
Написал похожий алгоритм, все стало нормально :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int X = 100;
int Y = 100;
Bitmap BM = new Bitmap(X, Y);
 
Random Rnd = new Random();
 
for (int y = 0; y < Y; y++)
{
    for (int x = 0; x < X; x++)
    {
        if(Rnd.Next(100) > 50)
            BM.SetPixel(x, y, Color.Azure);
    }
}
 
PicBox.Image = Render(BM);
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
02.02.2018, 10:52
Цитата Сообщение от Jesterru Посмотреть сообщение
А чем это поможет? И что изменится?
В Вашей ситуации никак) Просто в Вашем варианте создается битмап, затем вы создаете Графикс, рисуете, и уже после передаете отрисованый битмап в пикчербокс.

При рисовании через OnPaint у Вас уже есть Graphics и Вам просто нужно будет в оригинальном BitMap изменить цвет пикселя (я так понимаю Вы просто меняете цвет) и вызвать Invalidate(Rectangle), который перерисует только тот пиксель который Вы изменили.

Добавлено через 2 минуты
К стати не могу понять, для чего Вам циклы?
0
 Аватар для Jesterru
3 / 2 / 2
Регистрация: 19.06.2016
Сообщений: 299
02.02.2018, 11:01  [ТС]
Sanya_sa, Спасибо за помощь!
Циклы мне для того, чтобы обойти весь битмап
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
02.02.2018, 11:13
Цитата Сообщение от Jesterru Посмотреть сообщение
Циклы мне для того, чтобы обойти весь битмап
Это я вижу, не понятно для чего его весь обходить? Если известна координата пиксела, который хотите закрасить.
0
 Аватар для Jesterru
3 / 2 / 2
Регистрация: 19.06.2016
Сообщений: 299
02.02.2018, 11:16  [ТС]
Sanya_sa, У меня еще в изначальной версии была матрица bool, которую я обходил
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.02.2018, 11:16
Помогаю со студенческими работами здесь

Нарисовать прошлый Bitmap на новом так, чтобы небыл растянут рисунок, если новый Bitmap больше размером
Короче пытался сделать такое дело: Рисую фигуры на форме, когда отпускаю левую кнопку мыши (когда кнопка зажата, то растягивается например...

BitMap Основные функции + работа в Bitmap
Я наткнулся на пару проблем не известных для меня. 1. Как поставить &quot;Настройки компонента&quot; чтобы они работали в BitMap 2. Как...

Происходит ли "утечка памяти" при повторном выполнении: Bitmap bm1 = new Bitmap
Здравствуйте ! Подскажите, пожалуйста, происходит ли &quot;утечка памяти&quot; при создании объекта bm1 и, если не сложно - как её избежать. ...

Как нарисовать Bitmap на Bitmap?
Bitmap1-&gt;Canvas-&gt;Draw(1,1,Bitmap2); Так не работает, хотя с Image проходило.

Как обрезать Image (bitmap) в другой Image (bitmap)
Не получается никак пробовал с помощью Canvas-&gt;CopyRect. Вот метод где первый параметр изображение которое загрузили а второй обрезанное...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru