Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
113 / 100 / 68
Регистрация: 21.04.2014
Сообщений: 1,420

Как отобразить в pictureBox только определённую часть картинки

06.08.2015, 16:12. Показов 6183. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
У меня есть картинка, которая значительно больше pictureBox`а (прикладываю саму картинку). Сейчас я её отображаю во так:
C#
1
pictureBox2.Image = System.Drawing.Image.FromFile("C:\\Users\\tarakinab\\Desktop\\Del\\Del\\b.png");
Но мне нужно, чтобы была отображена только определённая область картинки. На пример начиная с координат 40Х40. В последствии я хочу менять эти координаты в цикле.

P.S. Как вы уже поняли я хочу сделать анимацию взрыва (кажется это называется спрайтом). Если я это делаю не правильно, то скажите как надо.
Миниатюры
Как отобразить в pictureBox только определённую часть картинки  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.08.2015, 16:12
Ответы с готовыми решениями:

чтобы было видно только какую то определенную часть картинки в pictureBox
Всем привет. Подскажите как сделать, чтобы было видно только какую то определенную часть картинки в pictureBox. Т.е. допустим есть картинка...

Как из PictureBox или из Bitmap скопировать часть картинки
есть ли в C# аналог метода CopyRect() в delphi, т.е. что бы с pictureBox1 или из bitmap скопировать часть картинки

Полупрозрачный контрол с возможностью выводить определённую часть картинки на передний план
Как сделать что-то подобное: т.е. чтобы была картинка, поверх неё полупрозрачный контрол с возможностью выводить определённую часть...

6
113 / 100 / 68
Регистрация: 21.04.2014
Сообщений: 1,420
06.08.2015, 17:28  [ТС]
Всё, отбой, сделал по другому.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for (int i = 1; i < 30; i++)
            {
                Image img = Image.FromFile("C:\\Users\\tarakinab\\Desktop\\Del\\Del\\1\\png\\" + i + ".png");
                //Выводим на g рисунок. 
                g.DrawImage(img, 100, 100);
                PiRef();
                //Делаем всё поле белым
                for (int j = 0; j < 80; j++)
                {
                    for (int n = 0; n < 40; n++)
                    {
                        g.FillRectangle(Brushes.White, j * 10, n * 10, 10, 10);
                    }
                }
                Thread.Sleep(10);
            }
Просто меняю 29 разных картинок)
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
06.08.2015, 17:50
FaceHoof, Если вы работаете с графикой и тем более делаете игру, то нужно забыть о PictureBox-ах. Нужно работать напрямую с Graphics:
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
using System;
using System.Drawing;
using System.Net;
using System.Windows.Forms;
 
namespace WindowsFormsApplication305
{
    public partial class Form1 : Form
    {
        private Sprite sprite;
 
        public Form1()
        {
            InitializeComponent();
 
            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true);
 
            var img = (Bitmap)Image.FromStream(new WebClient().OpenRead("http://www.luxinia.de/uploads/Tutorials/explosprite.png"));
            sprite = new Sprite {FrameSize = new Size(64, 64), Image = img, FrameCount = 16};
 
            new Timer() { Interval = 70, Enabled = true }.Tick += delegate { sprite.GotoNextFrame(); Invalidate(); };
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            e.Graphics.DrawImage(sprite.Image, new Rectangle(Point.Empty, sprite.FrameSize), new Rectangle(sprite.CurrentFrameLocation, sprite.FrameSize), GraphicsUnit.Pixel);
        }
    }
 
    class Sprite
    {
        public Size FrameSize;
        public Image Image;
        public int CurrentFrame = -1;
        public int FrameCount;
 
        public Point CurrentFrameLocation
        {
            get
            {
                var framesPerRow = Image.Width / FrameSize.Width;
                var x = CurrentFrame % framesPerRow;
                var y = CurrentFrame / framesPerRow;
 
                return new Point(x * FrameSize.Width, y * FrameSize.Height);
            }
        }
 
        public void GotoNextFrame()
        {
            CurrentFrame = (CurrentFrame + 1) % FrameCount;
        }
    }
}
Название: 1.png
Просмотров: 359

Размер: 22.6 Кб
3
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
09.08.2015, 10:29
Storm23, странно, некоторые утверждают что работать с графикой следует исключительно через пикчербоксы, а рисовать на форме - неправильно. Так как лучше?
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
09.08.2015, 11:19
Цитата Сообщение от Рядовой Посмотреть сообщение
странно, некоторые утверждают что работать с графикой следует исключительно через пикчербоксы

Кто же эти "некторые"? Это настолько абсурдно, что даже не знаю как коментировать.
Пикчербокс годится для отображения статических картинок. И это все.
Навскидку приведу несколько примеров:
1) Пикчербокс это контрол. Под капотом каждого контрола стоит паравоз всего механизма winAPI. Ведь каждый контрол для windows - это окно. Соответственно, если вы кинете на форму 10 пикчербоксов, это уже будет подтормаживать. Если 100 - форма сдохнет. (и это кстати касается не только пикчербоксов, но и любых контролов)
А ведь в графике нужно и можно выводить сотни и тысячи примитивов (пример)
2) Пикчербокс как и все контролы не поддерживает прозрачность. Соотвественно вы не сможете наложить изображения друг на друга.
3) Пикчербокс не поддерживает вращения, масштабирования, сдвига. Да них**а он не поддерживает, в общем.
4) В пикчербоксе нельзя настроить параметры антиалиасинга, сдвига пикселов, и т.п.
5) Для обеспечения интерактива, вам нужно вешать обработчики на каждый пикчербокс, вместо одного единого обработчика в случае Graphics.
6) В случае пикчербоксов, ваша форма будет мигать и перемигивать, какие бы настройки двойной буферизации вы не делали.
7)... 8)...

Вот недавно делал небольшой пример игры: танчики или вот паззл.
Жду реализации на пикчербоксах
0
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
09.08.2015, 11:22
если рисовать через Paint формы так ЦП вроде меньше ест, чем picBox.Refresh()
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
09.08.2015, 12:31
Интересно, надо попробовать перекинуть свой проект с пикчербокса на форму..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.08.2015, 12:31
Помогаю со студенческими работами здесь

Пользователь выделяет часть картинки из PictureBox
Как это красиво реализовать? желательно, чтобы вся картинка затемнилась, а выделенная часть была в нормальных цветах

Отобразить в ComboBox только часть строки
Приветствую! Нужно добавить элементы в КомбоБокс в виде &quot;&lt;Имя&gt; &lt;значение&gt;&quot;. Нужно, чтобы отображалось на форме только Имя, а Значение...

Как достать с сайта определённую часть страницы
Допустим на сайте(php) есть 3 поля в которых выбирается Специальность , потом появляется выбор Группа, и номер недели. После этих...

Как в PictureBox отобразить видео
Подскажите, как в picturebox отобразить видео, предположим .AVI формата?! Нужно использовать DirectShow?

Как отобразить массив в PictureBox пооптимальнее
Здравствуйте, Как можно отобразить масив byte r,g,b; в PictureBox (перевести в Image)? for... for... SetPixel - не подходит...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru