|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
31.03.2017, 17:41 | #1 |
Пользователь
Регистрация: 08.11.2011
Сообщений: 24
|
Ошибка с формированием пикселей изображения
Здравствуйте!
Пишу одну программу для некой обработки изображений. После обработки, применяя обратное масштабирование и формируя пиксели, вылетает ошибка: "Необработанное исключение типа "System.ArgumentException" в System.Drawing.dll. Дополнительные сведения: Значение '-2147483648' недопустимо для 'red'. 'red' должно быть больше или равно 0 и меньше или равно 255." Не знаю, откуда может появляться такое значение, если в методе Scale расписано условие для того, чтобы значения были строго от 0 до 255. Раньше с изображениями никогда не работала - это первый опыт. Может я до конца не понимаю, как работают методы SetPixel и Color.FromArbg. Помогите, пожалуйста, разобраться. Цикл, в котором вылетает ошибка: Код:
Код:
|
01.04.2017, 01:34 | #2 |
Участник клуба
Регистрация: 14.05.2016
Сообщений: 1,793
|
Так ничего не понятно.
Попробуй в методе "Scale", перед "return" сделать вывод сообщения на экран; сообщение по условию ( 0>value или value>255). В сообщении вывести все параметры, которые использовались при расчёте: Код:
|
02.04.2017, 16:09 | #3 |
Пользователь
Регистрация: 08.11.2011
Сообщений: 24
|
Вывела, проверила... точно ошибка не в Scale. Условия работают нормально и значения все в итоге от 0 до 255.
|
02.04.2017, 17:21 | #4 |
Участник клуба
Регистрация: 14.05.2016
Сообщений: 1,793
|
Какие у тебя еще предположения?
___________________________________ ___________________________ Для надёжности в методе Scale напиши не: Код:
Код:
Если это действительно не Scale, тогда что? Еще предположения: возьми все три цвета замени на "Blue", т.е. проверить ошибка выскакивает только при "Red" или это только первая ошибка, а потом программа стопориться. ___________________________________ __________________________ Ещё предположение: чему равно "bmp.Height" ("bmp.Width")? (временно закомментируй циклы и просто выведи на экран) Оно больше 255? ___________________________________ ___________________________ что такое "Red[i, j]"? Какае-то функция? ___________________________________ ___________________________ Проверяй как можно больше... Чем больше предположений проверишь, тем более правдивая картина будет... ___________________________________ _______ Показывай скриншоты на фоне кода. Ты умеешь делать скриншоты? |
02.04.2017, 22:22 | #5 | |
Пользователь
Регистрация: 08.11.2011
Сообщений: 24
|
работает - на выходе выдает серое изображение
Цитата:
высота и ширина изображения - в моем случае используются изображения только размера 512 на 512. Red, Blue и Green являются матрицами коэффициентов для соответствующих цветовых каналов. после проверки с заменой на Blue, я вообще перестала понимать, какое 'red' не может иметь такое значение) явно не про матрицу Red... остаюсь при мнении, что всё же не понимаю как работают методы SetPixel и Color.FromArbg... |
|
03.04.2017, 04:47 | #6 |
Участник клуба
Регистрация: 14.05.2016
Сообщений: 1,793
|
Я экспериментировал:
3.jpg подставлял также разные значения (вплоть до "ошибочных"): 3_1.jpg В тоже время, это число представляет собой предельное число для int: 4.jpg p.s.: сейчас у меня три предположения (но сначала, приведи свой код к первоначальному состоянию). а) В описании написано, что нужно подставить "byte", а у тебя приведение к "int" (это когда "...(int)...(int)...(int)....(int). ..."). Замени приведение на "(byte)" Вот этот момент: 5.jpg т.е. что-то вроде такого (у меня работало и так и так): 6.jpg б) Или индексы "i,j" выходят за пределы матрицы RED[], т.е. RED[512, 512] просто не существует. в) Или в массиве RED[i,j] есть все элементы, но какой-то просто не рассчитан (не присвоено числовое значение). По последним двум пунктам, нужно знать как формируется матрицы RED,BLUE GREA. Их можно (временно) вывести куда-нибудь (в листбокс, например) чтобы посмотреть на значения? Есть ли какае-то первоначальное обнуление этих матриц? p.s.: дело в том, что слова "матрицами коэффициентов для соответствующих цветовых каналов" мне ничего не говорят. Последний раз редактировалось ura_111; 03.04.2017 в 04:52. |
03.04.2017, 07:38 | #7 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
смотрите отладчиком на каких индексах что не так.
а потом проверяете результаты через вычисленное значение. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
04.04.2017, 01:48 | #8 |
Пользователь
Регистрация: 08.11.2011
Сообщений: 24
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
C# RGB поиск схожих по цвету пикселей. Упрощение изображения. | zink | Помощь студентам | 1 | 08.11.2014 22:09 |
Проблема с формированием массива | Drac0Sha | Помощь студентам | 4 | 24.12.2012 22:10 |
Вопрос по координатам пикселей изображения. | Vova777 | Общие вопросы Delphi | 0 | 06.07.2011 17:09 |
Проблема с формированием отчета | Swatch | Microsoft Office Access | 1 | 25.02.2010 00:32 |
Как избежать сужения (уменьшение размера) пикселей изображения, при включенном свойстве Stretch? | Лукманов Александр | Мультимедиа в Delphi | 8 | 26.10.2009 09:52 |