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

Разработайте функцию, которая каждую четную строку изображения переводит в градации серого цвета

02.04.2022, 20:17. Показов 1836. Ответов 4

Студворк — интернет-сервис помощи студентам
Разработайте функцию, которая каждую четную строку изображения переводит в градации серого цвета.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.04.2022, 20:17
Ответы с готовыми решениями:

Функция, которая каждую четную строку изображения переводит в градации серого цвета
Разработайте функцию, которая каждую четную строку изображения переводит в градации серого цвета

Преобразование изображения в градации серого
Нашел! Dim grayscale As New Imaging.ColorMatrix(New Single()() _ { _ New Single() {0.299, 0.299, 0.299,...

Перевод в градации серого части изображения
Доброго времени суток! Нужна помощь. Возникла проблема при выполнении вот такой работы: "Создайте функцию, выводящую на изображение...

4
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
03.04.2022, 07:50
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
/// <summary>
/// Перевод каждой чётной строки изображения в оттенки серого
/// </summary>
/// <param name="bmp">Исходное изображение</param>
/// <returns>Возвращает копию исходного изображения, каждая чётная строка которого преобразована в оттенки серого</returns>
/// <remarks>Формула "среднего" цвета R*0.3+G*0.59+B*0.11</remarks>
static Bitmap EvenRowsToGrayscale(Bitmap bmp)
{
    const int PIXELSIZE = 4;
    var result = bmp.Clone() as Bitmap;
    var rect = new Rectangle(0, 0, result.Width, result.Height);
    var bmp_data = result.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, result.PixelFormat);
    unsafe
    {
        for (int y = 0; y < result.Height; y += 2)
        {
            byte* row = (byte*)bmp_data.Scan0 + (y * bmp_data.Stride);
            for (int x = 0; x < result.Width; x++)
            {
                var gs = (byte)(row[x * PIXELSIZE] * 0.3f + row[x * PIXELSIZE + 1] * 0.59f + row[x * PIXELSIZE + 2] * 0.11f);
                row[x * PIXELSIZE] = gs;
                row[x * PIXELSIZE + 1] = gs;
                row[x * PIXELSIZE + 2] = gs;
            }
        }
    }
    result.UnlockBits(bmp_data);
    return result;
}
В свойствах проекта, в сборке, нужно разрешить небезопасный код. Для простоты принимаем, что изображение 32-битное
1
1 / 1 / 0
Регистрация: 13.12.2021
Сообщений: 27
03.04.2022, 08:32  [ТС]
У меня есть код для виндоус формы, по нажатию на 1 кнопку загружает изображание, нажатием на 2 кнопку переводит каждый !нечетный столбец! изображения в серый цвет, а должен каждую !четную строку! переводить в градацию серого цвета. Как мне поменять конркетно для 2 кнопки код (совсем запуталась)?

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
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;
 
namespace image_to_gray
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private Bitmap bmp;
        private Graphics g;
        private void button1_Click(object sender, EventArgs e)
        {
            Image image = Image.FromFile(@"C:\Users\Anna Koroleva\Desktop\яп\lab_12\lunch.jpg");
            int width = image.Width;
            int height = image.Height;
            pictureBox1.Width = width;
            pictureBox1.Height = height;
            bmp = new Bitmap(image, width, height);
            pictureBox1.Image = bmp;
            g = Graphics.FromImage(pictureBox1.Image);
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < bmp.Width; i += 20)
            {
                for (int j = 0; j < bmp.Height; j++)
                {
                    int R = bmp.GetPixel(i, j).R;
                    int G = bmp.GetPixel(i, j).G;
                    int B = bmp.GetPixel(i, j).B;
                    int Gray = (R + G + B) / 250;
                    Color p = Color.FromArgb(255, Gray, Gray, Gray);
                    bmp.SetPixel(i, j, p);
                }
            }
            Refresh();
        }
 
    }
}
0
 Аватар для roach1967
983 / 463 / 233
Регистрация: 27.06.2014
Сообщений: 1,033
03.04.2022, 12:57
Лучший ответ Сообщение было отмечено golova_vsemy как решение

Решение

golova_vsemy, вот так работает - на выбор строки/столбцы:
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
using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsFormsApp33
{
    public partial class Form1 : Form
    {
        private Image image;
        public Form1()
        {
            InitializeComponent();
            image = Image.FromFile(@"D:\SX680.jpg");
            pictureBox1.Image = image;
            pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
            pictureBox2.SizeMode = PictureBoxSizeMode.AutoSize;
        }
 
        private void Button2_Click(object sender, EventArgs e)
        {
            int width = image.Width;
            int height = image.Height;
            Bitmap bmp = new Bitmap(image, width, height);
 
            if (radioButton1.Checked) // если нужно перекрасть по строкам
            {
                for (int y = 1; y < height; y += 2) // строка с индексом 0 - первая, нечётная, поэтому начинаем с 1
                {
                    for (int x = 0; x < width; x++)
                    {
                        byte gray = (byte)(bmp.GetPixel(x, y).R * 0.3f + bmp.GetPixel(x, y).G * 0.59f + bmp.GetPixel(x, y).B * 0.11f);
                        bmp.SetPixel(x, y, Color.FromArgb(gray, gray, gray));
                    }
                }
            }
            else // если нужно перекрасть по столбцам
            {
                for (int x = 1; x < width; x += 2)
                {
                    for (int y = 0; y < height; y++)
                    {
                        byte gray = (byte)(bmp.GetPixel(x, y).R * 0.3f + bmp.GetPixel(x, y).G * 0.59f + bmp.GetPixel(x, y).B * 0.11f);
                        bmp.SetPixel(x, y, Color.FromArgb(gray, gray, gray));
                    }
                }
            }
            pictureBox2.Image = bmp;
        }
    }
}
На форме в первой pictureBos1 - оригинал картинки, во второй - перекрашенная...
1
 Аватар для roach1967
983 / 463 / 233
Регистрация: 27.06.2014
Сообщений: 1,033
03.04.2022, 13:00
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.04.2022, 13:00
Помогаю со студенческими работами здесь

Все точки внутри треугольника переводятся в градации серого цвета
Пожалуйста, помогите. Все точки внутри треугольника переводятся в градации серого цвета. Вот код. private void...

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

Отсортируйте каждую нечетную строку по возрастанию, а каждую четную – по убыванию
Задан двумерный массив чисел (используйте генератор случайных чисел). Отсортируйте каждую нечетную строку по возрастанию, а каждую четную –...

Написать функцию Atoi, которая переводит строку в число
Задание 8. Atoi Напишите функцию, которая переводит строку в число. Пользоваться библиотечными функциями нельзя. Требования: ...

Написать и протестировать функцию которая переводит целое число n в строку s
Написать и протестировать функцию I_TO_B(n, s, b), которая переводит целое число n в строку s, представляющую число в системе счисления...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru