Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.59/41: Рейтинг темы: голосов - 41, средняя оценка - 4.59
1 / 1 / 1
Регистрация: 17.03.2015
Сообщений: 110
1

Как разбить изображение на каналы RGB?

17.04.2015, 06:55. Просмотров 7792. Ответов 3
Метки нет (Все метки)

Разработайте функцию, разбивающую изображение на фрагменты, в каждом из которых остается только один из каналов (R, G, B).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2015, 06:55
Ответы с готовыми решениями:

Как разбить изображение на абзацы?
Есть словарь 1400 страниц, в каждой странице до 8(!) абзацев. Очень нужно разбить на абзацы...

Как разбить изображение на пиксели
Всем здраствуйте!!! Подскажите пожалуста как в С# работат с пикселями? тоесть разбить изображение...

Разложение цвета на каналы rgb
Здравствуйте! Подскажите, как происходит разложение цвета на каналы rgb или дайте, пожалуйста,...

Как преобразовать изображение с RGB на YCrCb?
Здравствуйте не подскажете как преобразовать изображение с RGB на YCrCb? Я знаю как это делается с...

3
7759 / 4208 / 1666
Регистрация: 11.02.2013
Сообщений: 8,990
17.04.2015, 07:25 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
static Bitmap[] GetRgbChannels(Bitmap source) {
    Bitmap[] result = new Bitmap[3] { new Bitmap(source.Width, source.Height), new Bitmap(source.Width, source.Height), new Bitmap(source.Width, source.Height) };
    for (int i = 0; i < source.Width; i++) {
        for (int j = 0; j < source.Height; j++) {
            Color color = source.GetPixel(i, j);
            result[0].SetPixel(i, j, Color.FromArgb(color.A, color.R, 0, 0));
            result[1].SetPixel(i, j, Color.FromArgb(color.A, 0, color.G, 0));
            result[2].SetPixel(i, j, Color.FromArgb(color.A, 0, 0, color.B));
        }
    }
    return result;
}
1
Миниатюры
Как разбить изображение на каналы RGB?  
Вложения
Тип файла: zip SplitToRgbChannels.zip (14.5 Кб, 141 просмотров)
7759 / 4208 / 1666
Регистрация: 11.02.2013
Сообщений: 8,990
17.04.2015, 08:42 3
Лучший ответ Сообщение было отмечено Chak-Nuris как решение

Решение

Этот способ пошустрее будет:
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
static Bitmap[] GetRgbChannels(Image source) {
    Bitmap[] result = new Bitmap[3];
    ImageAttributes imageAttributes = new ImageAttributes();
    ColorMatrix[] matrices = new ColorMatrix[3];
    for (int i = 0; i < matrices.Length; i++) {
        float[][] elements ={
        new float[]{i == 0 ? 1 : 0, 0, 0, 0, 0},
        new float[]{0, i == 1 ? 1 : 0, 0, 0, 0},
        new float[]{0, 0, i == 2 ? 1 : 0, 0, 0},
        new float[]{0, 0, 0, 1, 0},
        new float[]{0, 0, 0, 0, 0}
    };
        matrices[i] = new ColorMatrix(elements);
    }
    int w = source.Width, h = source.Height;
    for (int i = 0; i < result.Length; i++) {
        result[i] = new Bitmap(source);
        imageAttributes.ClearColorMatrix();
        imageAttributes.SetColorMatrix(matrices[i], ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
        using (Graphics g = Graphics.FromImage(result[i])) {
            g.DrawImage(result[i], new Rectangle(0, 0, w, h), 0, 0, w, h, GraphicsUnit.Pixel, imageAttributes);
        }
    }
    return result;
}
4
Вложения
Тип файла: zip SplitToRgbChannels.zip (14.8 Кб, 159 просмотров)
1 / 1 / 1
Регистрация: 17.03.2015
Сообщений: 110
20.04.2015, 09:14  [ТС] 4
Спасибо большое!!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2015, 09:14

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как считывать изображение RGB в массив?
привет всем ! как считывать изображение RGB в массив ? для этого есть готовые функции ? или нужно...

Как разбить изображение на блоки
Доброго времени суток! К примеру, у меня есть изображение размером 200х200,подскажите как мне его...

Как разбить изображение в шапке
Добрый день! Такой вопрос сложился, сейчас в шапке такой код: &lt;header class=&quot;site-header size-lg...

Как можно разбить изображение на произвольные области?
Здравствуйте. Как можно разбить изображение на произвольные области? Т.е. щелкнул в одной области -...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.