Как вывести изображение на экран c

от admin

Как вывести изображение на экран c

PictureBox предназначен для показа изображений. Он позволяет отобразить файлы в формате bmp, jpg, gif, а также метафайлы ищображений и иконки. Для установки изображения в PictureBox можно использовать ряд свойств:

Image : устанавливает объект типа Image

ImageLocation : устанавливает путь к изображению на диске или в интернете

InitialImage : некоторое начальное изображение, которое будет отображаться во время загрузки главного изображения, которое хранится в свойстве Image

ErrorImage : изображение, которое отображается, если основное изображение не удалось загрузить в PictureBox

Чтобы установить изображение в Visual Studio, надо в панели Свойств PictureBox выбрать свойство Image. В этом случае нам откроется окно импорта изображения в проект, где мы собственно и сможем выбрать нужное изображение на компьютере и установить его для PictureBox:

И затем мы сможем увидеть данное изображение в PictureBox:

Элемент PictureBox в Windows Forms

Либо можно загрузить изображение в коде:

Размер изображения

Для установки изображения в PictureBox используется свойство SizeMode , которое принимает следующие значения:

Normal : изображение позиционируется в левом верхнем углу PictureBox, и размер изображения не изменяется. Если PictureBox больше размеров изображения, то по справа и снизу появляются пустоты, если меньше — то изображение обрезается

StretchImage : изображение растягивается или сжимается таким обраом, чобы вместиться по всей ширине и высоте элемента PictureBox

AutoSize : элемент PictureBox автоматически растягивается, подстраиваясь под размеры изображения

CenterImage : если PictureBox меньше изображения, то изображение обрезается по краям и выводится только его центральная часть. Если же PictureBox больше изображения, то оно позиционируется по центру.

Zoom : изоражение подстраивается под размеры PictureBox, сохраняя при этом пропорции

How to display an image using C++ right in console window?

I need to display an image(bmp) in console window using C++ (Windows 10).

Not display by characters, for that I already knew how, but show the image pixel by pixel the way ordinary images appears to be.

And not by launch another application to show the image in another window, but right in the black console window.

I’ve searched it all over the internet, but didn’t seem to find a way to do it without using things like opencv. Is there a way to do it by myself, without opencv?

7 Answers 7

Your hypothesis is wrong: in general a C++ (or C) program might not even be started from some "console window" (e.g. it might be started in "batch mode"). In particular, some C++ implementations may run on computers (such as Linux servers in data centers, which are the majority of the servers on Internet) without any screen (so without any console window). Most top500 supercomputers don’t have screens you could access, but HPC software running on them (e.g. Tripoli-4) is often coded in C++. And embedded computers (e.g. your RaspberryPi) can be programmed in standard C++ (e.g. C++11 or C++14) without any screen or console window (e.g. in 2020 using a recent GCC compiler configured for cross-compilation)

(even on Windows, which I don’t know and never used, I am sure that there is some way to start programs -by configuring the computer to start some daemons or servers- before any "console window" exist)

So you should define more precisely what your platform is. In general the answer could be platform and operating system specific. See also OSDEV for examples of open source operating systems: FreeBSD is a famous one, and has a GCC or Clang compiler capable of compiling your C++ application.

I would strongly recommend using a portable graphical framework like Qt (in particular, because it makes your code more portable, if you code carefully). Of course you then requires your user to have it, or your distribute your code with Qt included. Consider also using FLTK or FOX or SFML toolkits.

The C++14 standard (and C++11 and earlier versions) does not know about images or console windows, so (in general, without mentioning any platform or operating system) your question is meaningless.

Study also for inspiration the source code of existing open source programs or libraries coded in C++ (on github or gitlab), such as the fish shell, KDE, GCC, the Clang static analyzer (and they both should be useful to you), RefPerSys, etc etc.

Загрузка и отображение картинки в Windows Forms c C#

Загрузка и отображение картинки в Windows Forms c C#

В данном примере я покажу Вам как можно загрузить картинку из Интернета и отобразить ее в пользовательском интерфейсе. Изображение будет отображаться при нажатии на кнопку причем, каждый раз будет новое изображение.

Интерфейс MainForm.Designer.cs

namespace ShowImagwFromInternetWinForm
<
partial class MainForm
<
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;

/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
<
if (disposing && (components != null))
<
components.Dispose();
>
base.Dispose(disposing);
>

#region Windows Form Designer generated code

/// <summary>
/// Required method for Designer support — do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
<
this.ImagePictureBox = new System.Windows.Forms.PictureBox();
this.DownloadImageButton = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.ImagePictureBox)).BeginInit();
this.SuspendLayout();
//
// ImagePictureBox
//
this.ImagePictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.ImagePictureBox.BackColor = System.Drawing.SystemColors.ActiveCaption;
this.ImagePictureBox.Location = new System.Drawing.Point(12, 12);
this.ImagePictureBox.Name = "ImagePictureBox";
this.ImagePictureBox.Size = new System.Drawing.Size(435, 462);
this.ImagePictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.ImagePictureBox.TabIndex = 0;
this.ImagePictureBox.TabStop = false;
//
// DonwloadImageButton
//
this.DownloadImageButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.DownloadImageButton.Cursor = System.Windows.Forms.Cursors.Hand;
this.DownloadImageButton.Location = new System.Drawing.Point(12, 496);
this.DownloadImageButton.Name = "DonwloadImageButton";
this.DownloadImageButton.Size = new System.Drawing.Size(435, 49);
this.DownloadImageButton.TabIndex = 1;
this.DownloadImageButton.Text = "Загрузить";
this.DownloadImageButton.UseVisualStyleBackColor = true;
this.DownloadImageButton.Click += new System.EventHandler(this.DonwloadImageButton_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 19F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(459, 557);
this.Controls.Add(this.DownloadImageButton);
this.Controls.Add(this.ImagePictureBox);
this.Name = "Form1";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Главное окно";
((System.ComponentModel.ISupportInitialize)(this.ImagePictureBox)).EndInit();
this.ResumeLayout(false);

private PictureBox ImagePictureBox;
private Button DownloadImageButton;
>
>

Код формы с логикой программы

namespace ShowImagwFromInternetWinForm
<
public partial class MainForm : Form
<
public MainForm()
<
InitializeComponent();
>

/**
* Загружает изображение
* и возвращает его как массив байт
*
*/
private static byte[] DownloadImage(string url)
<
using var httpClient = new HttpClient();
var response = httpClient.GetByteArrayAsync(url).Result;

/**
*
* Обработчик нажатия кнопки загрзки
*
*/
private void DonwloadImageButton_Click(object sender, EventArgs e)
<
DownloadImageButton.Text = "Картинка загружается. ";

// вызываем загрузку внутри отдельной задачи, чтобы не блокировать интерфейс
Task.Run(() =>
<

// загружаем картинку
var imageBytes = DownloadImage("https://source.unsplash.com/random");

// создаем объект Bitmap из массива байт
var bitmap = new Bitmap(new MemoryStream(imageBytes));

// Устанавливаем изображение для отображение пользователю
ImagePictureBox.Image = bitmap;

Таким образом, при запуске этой программы Вы увидите пустое окно, в которое при нажатии на кнопку будет загружено изображение.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Читать:
Indesit df5200 где находится вентилятор

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

Комментарии ( 0 ):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

Урок 2. Загружаем и отображаем картинки

Сегодня мы научимся отображать картинки в ваших программах.
lesson2
Этот урок очень простой и я постараюсь объяснить каждую строчку нашей следующей программы. Мы нарисуем приятный бэкграунд, нарисуем забавное существо и будем передвигать его с помощью клавиатуры.
Начнем с включения заголовочных файлов. Их должно быть три: stdio.h , stdlib.h и SDL.h . Файл stdlib.h нужен для функции atexit() .

После этого мы объявим три глобальных поверхности SDL_Surface . Как вы знаете, глобальные означают, что они могут использоваться всеми функциями внутри файла. Чтобы объявить что-либо глобально, просто поместите код объявления в верху файла, перед кодом функций. Также нам понадобятся две переменных типа int: xpos и ypos . Они будут хранить координаты положения нашего существа.

Функция InitImages() нужна, чтобы загружать изображения из файлов (BMP) на наши поверхности SDL_Surface . Позже мы вызовем эту функцию из функции main() . Внутри нашей функции мы используем SDL_LoadBMP . Эта функция принимает имя файла изображения в качестве параметра и возвращает указатель на структуру SDL_Surface . Мы загрузим две картинки: одну в SDL_Surface back , которая будет отображаться в качестве фона, а другую в SDL_Surface image , которая будет нашим существом.

А сейчас небольшое отступление. Вы узнаете о поддержке графических изображений в SDL.

Библиотекой SDL поддерживается только формат BMP. Вся эта поддержка состоит только из двух функций SDL_LoadBMP , которую мы использовали и SDL_SaveBMP , которая позволяет сохранять поверхность в файл BMP. Для этой функции передавайте в качестве параметра поверхность, которую надо сохранить и имя файла, куда сохранять. Вот ее прототип:
int SDL_SaveBMP(SDL_Surface *surface, const char *filename);
Функция возвращает 0 при успехе и -1 при ошибке. Но иногда неудобно использовать формат BMP. Такие файлы занимают много места. Существует библиотека SDL Image, которая позволяет очень просто работать с изображениями очень многих форматов. Загрузить эту библиотеку можно на официальном сайте.

Следующие две функции выводят изображение на экран. Обе функции называются DrawIMG . Первая из них принимает в качестве параметра поверхность, которую нужно отобразить и координаты в которых это изображение появится на экране. Для этого нам пригодится функция SDL_BlitSurface() , с помощью которой одну поверхность можно отобразить на другой. Вот прототип функции, взятый из документации SDL:

int SDL_BlitSurface(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect);

Здесь src это поверхность, которую мы хотим отобразить, а dst это поверхность на которой отобразится src . Еще два параметра — это указатели на структуру SDL_Rect: srcrect и dstrect . Эта структура содержит 4 16-битных целых числа: x, y, w(ширина) и h(высота) . Параметр srcrect указывает какую часть исходной поверхности отобразить, а dstrect задает координаты принимающей поверхности, в которых отобразится исходная. Если в качестве второго параметра NULL , то все исходное изображение будет отображено целиком. В структуре dstrect элементы ширина (w) и высота (h) не обрабатываются функцией и не имеют никакого значения. Вот код первой функции DrawIMG :

Вторая функция использует параметр srcrect . Элементы x и y структуры srcrect задают координату откуда начинать копирование изображения, а ширина и высота определяют размеры исходного копируемого изображения. То есть, мы рисуем только часть изображения. Взгляните на код функции и постарайтесь понять, что происходит:

Теперь разберем функцию DrawBG() , с помощью которой будем рисовать бэкграунд (задний фон). Впоследствии, в функции main перед началом главного цикла мы вызовем ее. Как вы помните с предыдущего урока, нам не надо блокировать экран для отображения картинок. В этой функции мы просто копируем фоновое изображение на экранную поверхность SDL_Surface *screen . Нам не понадобится функция обновления экрана вроде SDL_Flip() , потому что бэкграунд нужно нарисовать только один раз. Заметьте, что копировать изображение поверхности можно на любую поверхность, а не только на экран. Вот код для рисования заднего фона:

Далее следует функция рисования сцены. Сначала мы копируем на экран часть бэкграунда, на котором находится наше существо (по сути это прямоугольник). Затем в этом же положении копируем на экран изображение существа. А затем обновляем экран с помощью SDL_Flip() (так как все рисование происходит в невидимом буфере screen , который мы выводим в итоге на экран). С этого места подробнее. Стандартный алгоритм для анимации движения таков:

  • Затираем изображение участком фона, на котором это изображение расположено
  • Рисуем изображение в новом месте (с новыми координатами)
  • Опять затираем изображение участком фона, на котором находится изображение
  • Рисуем изображение на новом месте

И так продолжается пока не предусмотрено иное действие. Мы будем придерживаться этого алгоритма. Изображение нашего существа имеет размеры 128х128 . Координаты текущего положения будут изменяться только на 1 точку, т.е. при одном нажатии на клавишу изменяем на 1 точку. Участок фона, которым мы будем затирать изображение будет немного больше в размерах и это здорово облегчит нашу задачу. То есть если наше изображение размерами 128х128 , то участок фона должен быть (2+128+2)х(2+128+2) или 132х132 . Вот что должно в итоге получиться:

Все, что осталось, это функция main . Создадим для начала указатель на переменную типа Uint8 , который будем использовать для определения нажатия клавиш клавиатуры. После этого происходит инициализация, о которой вы читали в первом уроке.

Затем загружаем изображения и рисуем фон:

Начинаем главный цикл и проверяем на нажатие клавишу ESCAPE . Все как в первом уроке:

Теперь надо получить состояние клавиш клавиатуры. Помните нашу переменную Uint8 *keys ? Так вот, функция SDL_GetKeyState() возвращает указатель на массив Uint8 . Каждый элемент массива содержит состояние определенной клавиши клавиатуры (нажата или нет). Мы не проверяем все клавиши в event-цикле (там где проверка на нажатие ESCAPE), потому что SDL_PollEvent реагирует только на события (например KEYDOWN ), но не будет реагировать на удерживание клавиши. После этого рисуем сцену:

Когда выходим из цикла, то программа завершает работу:

Вот и все! Вы конечно еще не профессионалы, но по крайней мере постигли основы и знаете как это делать. Исходники для этого урока.

Похожие статьи