Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/47: Рейтинг темы: голосов - 47, средняя оценка - 5.00
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636

Работа с изображением в консольном приложении

19.09.2019, 17:19. Показов 9508. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Помогите разобраться в материале
У меня по курсачу нужно работать с изображением, БЕЗ ФОРМ. Но я не понимаю как его даже загрузить.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
 
namespace Map
{
    class Program
    {
        static void Main(string[] args)
        {
            Image bmp = Image.FromFile("test.jpg");
        }
    }
}
Вот к примеру уже на этом этапе у меня две ошибки:
Ошибка CS0246 Не удалось найти тип или имя пространства имен "Image" (возможно, отсутствует директива using или ссылка на сборку).
Ошибка CS0103 Имя "Image" не существует в текущем контексте.
В чем проблема то?

Мне нужно загрузить изображение, вывести его на экран, после чего искать на нем, как я полагаю через двумерный массив, "черные точки" это так для начала, больше препод отказался говорить пока не пойму класс Image . Вот собственно мне нужны примеры, литература, сайты(только не МСДН - там ни слова не понятно) объяснение как это делается.
Вот нашел сайт http://www.programmer-lib.ru/csharp_page.php?id=46, там хоть я узнал про Image.Fromfile() (ищу дальше сайтики...) который у меня не работает
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.09.2019, 17:19
Ответы с готовыми решениями:

Работа с файлами в консольном приложении
Доброго времени суток! Занимаясь изучение C#, попала мне такое задание, но как его правильно реализовать - не знаю. Тем более, на сколько...

Работа с List<T> в консольном приложении: заполнение/вывод
Доброго времени суток! Не первый день копаю интернет, но никак не могу толком разобраться, как работать с коллекциями. Может, кто...

Работа с векторами в консольном приложении
Добрый вечер. Помогите доделать задачку: 1) Нужно создать консольное приложение; 2) В нём класс Vector. 3) В этом классе создать 3...

8
 Аватар для Kazbek17
1483 / 938 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
19.09.2019, 17:41
Vlast001,
Добавьте ссылку System.Drawing в проект, через менеджер.

Вставьте правильно данный код.
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
94
95
class Program
    {
 [System.Runtime.InteropServices.DllImport("kernel32.dll", SetLastError = true)]
        private static extern IntPtr GetConsoleWindow();
        [System.Runtime.InteropServices.DllImport("kernel32.dll", SetLastError = true)]
        private static extern IntPtr CreateFile(
        string lpFileName,
        int dwDesiredAccess,
        int dwShareMode,
        IntPtr lpSecurityAttributes,
        int dwCreationDisposition,
        int dwFlagsAndAttributes,
        IntPtr hTemplateFile);
 
        [System.Runtime.InteropServices.DllImport("kernel32.dll", SetLastError = true)]
        private static extern bool GetCurrentConsoleFont(
        IntPtr hConsoleOutput,
        bool bMaximumWindow,
        [System.Runtime.InteropServices.Out][System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPStruct)]ConsoleFontInfo lpConsoleCurrentFont);
 
        [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
        internal class ConsoleFontInfo
        {
            internal int nFont;
            internal Coord dwFontSize;
        }
 
        [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Explicit)]
        internal struct Coord
        {
            [System.Runtime.InteropServices.FieldOffset(0)]
            internal short X;
            [System.Runtime.InteropServices.FieldOffset(2)]
            internal short Y;
        }
 
        private const int GENERIC_READ = unchecked((int)0x80000000);
        private const int GENERIC_WRITE = 0x40000000;
        private const int FILE_SHARE_READ = 1;
        private const int FILE_SHARE_WRITE = 2;
        private const int INVALID_HANDLE_VALUE = -1;
        private const int OPEN_EXISTING = 3;
        private static Size GetConsoleFontSize()
        {
            IntPtr outHandle = CreateFile("CONOUT$", GENERIC_READ | GENERIC_WRITE,
                FILE_SHARE_READ | FILE_SHARE_WRITE,
                IntPtr.Zero,
                OPEN_EXISTING,
                0,
                IntPtr.Zero);
            int errorCode = System.Runtime.InteropServices.Marshal.GetLastWin32Error();
            if (outHandle.ToInt32() == INVALID_HANDLE_VALUE)
            {
                throw new System.IO.IOException("Unable to open CONOUT$", errorCode);
            }
 
            ConsoleFontInfo cfi = new ConsoleFontInfo();
            if (!GetCurrentConsoleFont(outHandle, false, cfi))
            {
                throw new InvalidOperationException("Unable to get font information.");
            }
 
            return new Size(cfi.dwFontSize.X, cfi.dwFontSize.Y);
        }
 
static void Main(string[] args)
        {
 
            Point location = new Point(10, 10);
            Size imageSize = new Size(20, 10);
 
            Console.SetCursorPosition(location.X - 1, location.Y);
            Console.SetCursorPosition(location.X + imageSize.Width, location.Y);
            Console.SetCursorPosition(location.X - 1, location.Y + imageSize.Height - 1);
            Console.SetCursorPosition(location.X + imageSize.Width, location.Y + imageSize.Height - 1);
 
            string path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonPictures), @"Sample Pictures\tulips.jpg");
            using (Graphics g = Graphics.FromHwnd(GetConsoleWindow()))
            {
                using (Image image = Image.FromFile(path))
                {
                    Size fontSize = GetConsoleFontSize();
 
                    Rectangle imageRect = new Rectangle(
                        location.X * fontSize.Width,
                        location.Y * fontSize.Height,
                        imageSize.Width * fontSize.Width,
                        imageSize.Height * fontSize.Height);
                    g.DrawImage(image, imageRect);
                }
            }
            Console.ReadKey();
        }
        
}
3
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
19.09.2019, 18:14  [ТС]
Цитата Сообщение от Kazbek17 Посмотреть сообщение
Добавьте ссылку System.Drawing в проект, через менеджер.
Помогло, спасибо большое.

Я вставил код, вывелась картинка, но кода слишком много можешь объяснить что происходит?
Для начала я не знал о папке C:\Users\Public\Pictures перешел в ту папку по тексту ошибки при запуске и вставил свою картинку и соответствующую строку кода(77 строка) @"Sample Pictures\tulips.jpg" изменил на "test.jpg". И пока что единственный нормальный вопрос: как изменить папку с которой читать изображение?
0
 Аватар для jester
352 / 247 / 76
Регистрация: 18.03.2016
Сообщений: 979
19.09.2019, 18:21
Vlast001, можно так сделать
C#
1
string path = "C:\\Users\\Пользователь\\Desktop\\фото\\KubbkzJcxxI.jpg";
можно было бы так
https://metanit.com/sharp/windowsforms/4.20.php

но
Цитата Сообщение от Vlast001 Посмотреть сообщение
У меня по курсачу нужно работать с изображением, БЕЗ ФОРМ.
тогда прям в консоли вводить путь
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
19.09.2019, 20:10  [ТС]
Kazbek17,
Что значит:
[CSHARP]
[System.Runtime.InteropServices.DllImport ("kernel32.dll", SetLastError = true)]
[System.Runtime.InteropServices.DllImport ("kernel32.dll", SetLastError = true)]
[System.Runtime.InteropServices.DllImport ("kernel32.dll", SetLastError = true)]
[System.Runtime.InteropServices.Out][System.Runtime.InteropServices.MarshalAs (System.Runtime.InteropServices.Unmanage dType.LPStruct)]ConsoleFontInfo lpConsoleCurrentFont);
/CSHARP] и так далее?
0
 Аватар для Kazbek17
1483 / 938 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
19.09.2019, 20:47
Vlast001,
Цитата Сообщение от Vlast001 Посмотреть сообщение
System.Runtime.InteropServices.DllImport
Это библиотека для вызова неуправляемого кода.
Читайте, все доступно
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
19.09.2019, 20:49  [ТС]
Цитата Сообщение от Kazbek17 Посмотреть сообщение
Это библиотека для вызова неуправляемого кода.
Читайте, все доступно
Спасибо!
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
20.09.2019, 09:35  [ТС]
Kazbek17, можешь объяснить, пожалуйста, почему нужно использовать неуправляемый код, можно ли переделать код без неуправляемого кода? Для чего этот неуправляемый вообще нужен, вот к примеру у тебя
C#
1
2
3
4
 private static extern bool GetCurrentConsoleFont(
        IntPtr hConsoleOutput,
        bool bMaximumWindow,
        [System.Runtime.InteropServices.Out][System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPStruct)]ConsoleFontInfo lpConsoleCurrentFont);
в функции последний аргумент неуправляемый код, ну вот что это такое? Извини, если наседаю, мне просто стало оч интересно + если нельзя сделать без неуправляемого кода я должен буду преподу рассказать какого черта именно так
0
 Аватар для Kazbek17
1483 / 938 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
21.09.2019, 17:32
Цитата Сообщение от Vlast001 Посмотреть сообщение
почему нужно использовать неуправляемый код
Да потому что по другому никак не отобразить картинку без API.
Цитата Сообщение от Vlast001 Посмотреть сообщение
Для чего этот неуправляемый вообще нужен, вот к примеру у тебя
C#Выделить код
1
2
3
4
*private static extern bool GetCurrentConsoleFont(
* * * * IntPtr hConsoleOutput,
* * * * bool bMaximumWindow,
* * * * [System.Runtime.InteropServices.Out][System.Runtime.InteropServices.MarshalAs (System.Runtime.InteropServices.Unmanage dType.LPStruct)]ConsoleFontInfo lpConsoleCurrentFont);
Если этот параметр имеет значение TRUE, информация о шрифте извлекается для максимального размера окна. Если этот параметр имеет значение FALSE, информация о шрифте извлекается для текущего размера окна.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.09.2019, 17:32
Помогаю со студенческими работами здесь

Работа с файлами в консольном приложении
Пожалуйста подскажите как в Visual C++ 2008 работать с файлами в проекте консольного приложения?

Работа с UTF-8 в консольном приложении C++
Привет. Работаю над небольшим проектом,нужно работать со спецсимволами,таблицы ascii не хватает и я решил взяться за юникод. Все чего...

Работа с русским языком в консольном приложении
Как можно осуществить ввод-вывод текста на русском языке в консоли? Просто я в программе использовал уже тексты в файлах на русском...

Код который работает в консольном приложении в приложении Windows Forms выдает ошибку
Есть код для записи видео с экрана. В консольном приложении он работает, записывает все как нужно. Вставляю код классов в приложение...

Таймер в консольном приложении
Подскажите, как сделать чтобы консольное приложение было постоянно запущено и раз в 1 минуту выполняло одну из функций? Добавлено...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru