Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для Rudy_Wade
1 / 1 / 3
Регистрация: 02.06.2013
Сообщений: 139

Невозможно создать класс

18.01.2017, 13:14. Показов 1214. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нашел следующий код:
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
 /// <summary>
    /// Обертка над Bitmap для быстрого чтения и изменения пикселов.
    /// Также, класс контролирует выход за пределы изображения: при чтении за границей изображения - возвращает DefaultColor, при записи за границей изображения - игнорирует присвоение.
    /// </summary>
    public class ImageWrapper : IDisposable, IEnumerable<Point>
    {
        /// <summary>
        /// Ширина изображения
        /// </summary>
        public int Width { get; private set; }
        /// <summary>
        /// Высота изображения
        /// </summary>
        public int Height { get; private set; }
        /// <summary>
        /// Цвет по-умолачнию (используется при выходе координат за пределы изображения)
        /// </summary>
        public Color DefaultColor { get; set; }
 
        private byte[] data;//буфер исходного изображения
        private byte[] outData;//выходной буфер
        private int stride;
        private BitmapData bmpData;
        private Bitmap bmp;
 
        /// <summary>
        /// Создание обертки поверх bitmap.
        /// </summary>
        /// <param name="copySourceToOutput">Копирует исходное изображение в выходной буфер</param>
        public ImageWrapper(Bitmap bmp, bool copySourceToOutput = false)
        {
            Width = bmp.Width;
            Height = bmp.Height;
            this.bmp = bmp;
 
            bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
            stride = bmpData.Stride;
 
            data = new byte[stride * Height];
            System.Runtime.InteropServices.Marshal.Copy(bmpData.Scan0, data, 0, data.Length);
 
            outData = copySourceToOutput ? (byte[])data.Clone() : new byte[stride * Height];
        }
 
        /// <summary>
        /// Возвращает пиксел из исходнго изображения.
        /// Либо заносит пиксел в выходной буфер.
        /// </summary>
        public Color this[int x, int y]
        {
            get
            {
                var i = GetIndex(x, y);
                return i < 0 ? DefaultColor : Color.FromArgb(data[i + 3], data[i + 2], data[i + 1], data[i]);
            }
 
            set
            {
                var i = GetIndex(x, y);
                if(i >= 0)
                {
                    outData[i] = value.B;
                    outData[i + 1] = value.G;
                    outData[i + 2] = value.R;
                    outData[i + 3] = value.A;
                };
            }
        }
 
        /// <summary>
        /// Возвращает пиксел из исходнго изображения.
        /// Либо заносит пиксел в выходной буфер.
        /// </summary>
        public Color this[Point p]
        {
            get { return this[p.X, p.Y]; }
            set { this[p.X, p.Y] = value; }
        }
 
        /// <summary>
        /// Заносит в выходной буфер значение цвета, заданные в double.
        /// Допускает выход double за пределы 0-255.
        /// </summary>
        public void SetPixel(Point p, double r, double g, double b)
        {
            if (r < 0) r = 0;
            if (r >= 256) r = 255;
            if (g < 0) g = 0;
            if (g >= 256) g = 255;
            if (b < 0) b = 0;
            if (b >= 256) b = 255;
 
            this[p.X, p.Y] = Color.FromArgb((int)r, (int)g, (int)b);
        }
 
        int GetIndex(int x, int y)
        {
            return (x < 0 || x >= Width || y < 0 || y >= Height) ? -1 : x * 4 + y * stride;
        }
 
        /// <summary>
        /// Заносит в bitmap выходной буфер и снимает лок.
        /// Этот метод обязателен к исполнению (либо явно, лмбо через using)
        /// </summary>
        public void Dispose()
        {
            System.Runtime.InteropServices.Marshal.Copy(outData, 0, bmpData.Scan0, outData.Length);
            bmp.UnlockBits(bmpData);
        }
 
        /// <summary>
        /// Перечисление всех точек изображения
        /// </summary>
        public IEnumerator<Point> GetEnumerator()
        {
            for (int y = 0; y < Height; y++)
                for (int x = 0; x < Width; x++)
                    yield return new Point(x, y);
        }
 
        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
 
        /// <summary>
        /// Меняет местами входной и выходной буферы
        /// </summary>
        public void SwapBuffers()
        {
            var temp = data;
            data = outData;
            outData = temp;
        }
    }
Собственно, вопрос состоит в том, как прикрепить данный класс к своему проекту. Что я делал: Создать проект -> Visual C# -> Class Library, затем добавил этот код, но скомпилировать dll не удалось, так как компилятор ругался на класс Color, который находится в библиотеке System.Drawing, которую в свою очередь почему-то нельзя указать в разделе using. Что делать?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.01.2017, 13:14
Ответы с готовыми решениями:

Создать класс, такой, чтобы невозможно создать больше 3-х объектов этого класса
Добрий день товарищи!!! Помогите написать вот такую задачка.... Создать класс, такой, чтобы невозможно создать больше 3-х объектов...

Абстрактный класс, почему невозможно создать экземпляр?
Почему невозможно создать экземпляр абстрактного класса?

Создать класс колесо, имеющее радиус. Определить конструкторы. Создать класс машин, содержащий класс колесо
Создать класс колесо, имеющее радиус. Определить конструкторы. Создать класс машин, содержащий класс колесо. Дополнительно есть марка,...

5
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
18.01.2017, 13:19
Rudy_Wade, не обязательно класс запихивать в отдельную dllку. Я думаю, в вашем случае это совершенно не нужно. Добавляйте его в тот же проект, в каком используете. А using не добавляется потому, что ссылка на System.Drawing в проект не добавлена(можете добавить ее, но, скорее всего, в основном проекте она уже добавлена, так что достаточно перенести класс туда)
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
18.01.2017, 13:19
Лучший ответ Сообщение было отмечено Rudy_Wade как решение

Решение

Цитата Сообщение от Rudy_Wade Посмотреть сообщение
Что делать?
Подсоединить сборку System.Drawing в свойствах проекта (Project -> Add Reference), а уже потом подключить и using.
1
 Аватар для Rudy_Wade
1 / 1 / 3
Регистрация: 02.06.2013
Сообщений: 139
18.01.2017, 13:24  [ТС]
Что будет, если изменить просто Color на System.Drawing.Color:

Error CS0234 The type or namespace name 'Color' does not exist in the namespace 'System.Drawing' (are you missing an assembly reference?) ClassLibrary2 c:\users\sitea\documents\visual studio 2015\Projects\ClassLibrary2\ClassLibrary 2\Class1.cs 27 Active

Добавлено через 2 минуты
Цитата Сообщение от EvilFromHell Посмотреть сообщение
Rudy_Wade, не обязательно класс запихивать в отдельную dllку. Я думаю, в вашем случае это совершенно не нужно. Добавляйте его в тот же проект, в каком используете. А using не добавляется потому, что ссылка на System.Drawing в проект не добавлена(можете добавить ее, но, скорее всего, в основном проекте она уже добавлена, так что достаточно перенести класс туда)
Я думал так поступить, да код получится менее разборчивым и более громоздким.

Добавлено через 1 минуту
Цитата Сообщение от kolorotur Посмотреть сообщение
Подсоединить сборку System.Drawing в свойствах проекта (Project -> Add Reference), а уже потом подключить и using.
Спасибо!
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
18.01.2017, 13:28
Rudy_Wade, во всем надо знать меру. Каждый мелкий класс пихать в отдельную dllку нет никакого смысла. В них имеет смысл пихать гораздо более крупные сущности. А мелкие классы просто распределяются по папкам внутри одного проекта.
0
 Аватар для Rudy_Wade
1 / 1 / 3
Регистрация: 02.06.2013
Сообщений: 139
18.01.2017, 20:02  [ТС]
Цитата Сообщение от EvilFromHell Посмотреть сообщение
во всем надо знать меру. Каждый мелкий класс пихать в отдельную dllку нет никакого смысла. В них имеет смысл пихать гораздо более крупные сущности. А мелкие классы просто распределяются по папкам внутри одного проекта.
Возьму на заметку. Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.01.2017, 20:02
Помогаю со студенческими работами здесь

Создать абстрактный класс «Товар», на его основе создать класс «Автомобиль»
Вечер добрый, а может и не добрый. В изучении C# столкнулся с такой проблемой - как исключения. Имею такую задачу. Создать абстрактный...

Создать класс Point, на его основе создать класс Line
Здравствуйте, есть такая часть задачки: &quot;Создать класс Point, на его основе создать класс Line. В классах описать следующие элементы: ...

Создать класс Man (человек), с полями: имя, возраст, пол и вес. Создать производный класс Student ...
Создать класс Man (человек), с полями: имя, возраст, пол и вес. Определить методы задания имени, возраста и веса. Создать производный класс...

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru