1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
| Neon6868 |
14.09.2008 12:31
Сообщение
#1
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: 0 |
Необходимо написать программу на C++ для перевода из цветовой схемы YUV в HSV. Но для этого сначала необходимо переводить в RGB, а затем в нужную цветовую схему. Я создал свой класс и объект этого класса. Затем пытаюсь присвоить полю этого объекта число. Программа компилируется (пишет что ошибок нет), но при запуске программы после нажатия кнопки перевести выдается ошибка: "Access violation at adress 00401BB1 in module Project1.exe. Write of adress 00000000" Подскажите в чем ошибка? Я не уверен что выложил нужный код, а все файлы нельзя загрузить.
//--------------------------------------------------------------------------- Прикрепленные файлы
Project1.cpp ( 1.05 килобайт )
Кол-во скачиваний: 200 |
| volvo |
14.09.2008 12:44
Сообщение
#2
|
|
Гость |
Цитата а все файлы нельзя загрузить А все и не надо. Ты покажи, как работаешь с классом, и определение самого класса. |
| andriano |
14.09.2008 14:53
Сообщение
#3
|
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
И еще: непонятно, зачем двухстуенчатое преобразование через RGB, если требуется не универсальный конвертер, а лишь преобразование одного наперед заданного формата в другой наперед заданный.
|
| Neon6868 |
15.09.2008 16:00
Сообщение
#4
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: 0 |
И еще: непонятно, зачем двухстуенчатое преобразование через RGB, если требуется не универсальный конвертер, а лишь преобразование одного наперед заданного формата в другой наперед заданный. Дело в том, что на лекции мы рассматривали только такой способ. Поэтому таким образом и надо сделать программу. С прошлым вопросом я разобрался - легче использовать обычную переменную. Но при запуске программы после нажатия кнопки перевести выдается ошибка: "is not a valid floating point value" Подскажите плиз в чем дело? //--------------------------------------------------------------------------- Сообщение отредактировано: Neon6868 - 15.09.2008 16:03 |
| volvo |
15.09.2008 16:17
Сообщение
#5
|
|
Гость |
Цитата Подскажите плиз в чем дело? В том, что на момент нажатия кнопки у тебя в Y->Text строка, которая не является правильной записью числа. Особое внимание обрати на DecimalSeparator, это очень часто упускают из виду... |
| Neon6868 |
15.09.2008 17:23
Сообщение
#6
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: 0 |
|
| Neon6868 |
17.09.2008 0:26
Сообщение
#7
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: 0 |
Написал я полностью программу, а она почему-то абсолютно все неправильно считает, хотя делал все по формулам. Ошибка доже при переводе из YUV в RGB, хотя там вроде даже негде ошибиться. Может кто знает в чем проблема? Заранее спасибо!
//--------------------------------------------------------------------------- Сообщение отредактировано: Neon6868 - 17.09.2008 0:28 |
| Neon6868 |
21.09.2008 16:33
Сообщение
#8
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: 0 |
Подправил программу, но несколько проблем осталось. При переводе из YUV в RGB если ввести максимальные значения из диапазона, т.е. Y=255,U=111,V=157, то получаются значения R=434, G=120, B=573. А значения R и B не входят в диапазон возможных значений схемы RGB. Формулы правильные, то же самое получается если использовать формулы из Википедии. А вторая проблема-неправильно вычисляется компонента H для схемы HSV. Подскажите плиз в чем дело?
//--------------------------------------------------------------------------- Сообщение отредактировано: Neon6868 - 21.09.2008 16:39 |
| Neon6868 |
22.09.2008 15:54
Сообщение
#9
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: 0 |
Неужели никто не знает в чем причина? Если кто знает, подскажите пожалуйста.
|
| Lapp |
23.09.2008 5:57
Сообщение
#10
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
1. Твои формулы явно отличаются от приведенных Википедии http://ru.wikipedia.org/wiki/YUV (кстати, если говоришь про внешний источник, приводи точные ссылки, не заставляй людей искать).
2. Откуда взяты значения, которые ты называешь максимальными? Я не спец по цветоделению, как и большинство народа тут, думаю, так что ты приводи побольше инфы, если хочешь получить помощь. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
| Neon6868 |
24.09.2008 16:30
Сообщение
#11
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: 0 |
1. Твои формулы явно отличаются от приведенных Википедии http://ru.wikipedia.org/wiki/YUV (кстати, если говоришь про внешний источник, приводи точные ссылки, не заставляй людей искать). 2. Откуда взяты значения, которые ты называешь максимальными? Я не спец по цветоделению, как и большинство народа тут, думаю, так что ты приводи побольше инфы, если хочешь получить помощь. Мои формулы правильные, надо было при получении значения больше, чем 255, просто записать 255. Так что с этим разобрался. Осталось только понять, почему функция atan2 возвращает неправильные значения. |
| Lapp |
25.09.2008 6:53
Сообщение
#12
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Трудно и неинтересно разговаривать с человеком, который на каждом шагу твердит:
Формулы правильные, Мои формулы правильные, - хотя тут же говорит обратное:надо было при получении значения больше, чем 255, просто записать 255. Ибо это, если оно так, тоже есть часть формулы, если его нет - о какой такой правильности ты говоришь?..И почему ты с такой легкостью отвергаешь формулы и Вики, сеачала сказав, что они такие же?.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
| volvo |
25.09.2008 9:07
Сообщение
#13
|
|
Гость |
Осталось только понять, почему функция atan2 возвращает неправильные значения. atan2 возвращает неправильные значения, когда получает неправильные параметры. Я не знаю, какими тестами ты проверяешь правильность, но если хочешь - приведи значения R, G, B, при которых по-твоему происходит ошибка (не забудь также написать, что ты ожидаешь увидеть в качестве результата).И не надо говорить, что это не работает для любых исходных данных, потому что:
|
| Neon6868 |
27.09.2008 18:04
Сообщение
#14
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: 0 |
Lapp
До того как я написал что формулы верны, я не знал, что при получении результата, не входящего в диапазон возможных значений, его надо приводить к конкретному числу. И лично я не считаю это частью формулы. Я бы назвал это примечанием. volvo 1. Не знаю почему буква r отобразилась в нижнем регистре, у меня в программе она в верхнем регистре. 2. К примеру я ввожу значение H=359, S=255, V=255. Жму перевести, получаю значения. Затем жму перевести обратно и получаю H совсем другое. Мне преподаватель написал по этому поводу: "Hue->Text=FloatToStr((atan2(Px,Py)*180/3.14)); - неверно. Необходимо по координатам точки получить угол 0..359, читай описание atan2, что она получает и что возвращает." Я вроде как и получаю угол, передав функции atan2 координаты нужной точки. Может я не так что-то понимаю? |
| volvo |
27.09.2008 19:27
Сообщение
#15
|
|
Гость |
Цитата Я вроде как и получаю угол, передав функции atan2 координаты нужной точки. Может я не так что-то понимаю? Вообще-то прототип функции atan2 - вот такой:float atan2(float y, float x);, то есть, первым параметром в любом случае должен быть Y, а вторым - X... Это первое. Второе - мало того, что функция возвращает значение угла в радианах, так еще в интервале от -pi до pi, значит, просто переводом радиан в градусы ты ничего не добьешься, нужно еще преобразовать углы из -180 .. 180 в 0 .. 360. Начерти на бумаге схему, и подумай, как это сделать... Ну, и наконец: Py=(sqrt(3)/2*(G-B)); // Это у меня компилироваться отказалось., пришлось делать Py=(sqrt(3.0)/2*(G-B)); Вот пока и все... Экспериментируй |
| Neon6868 |
29.09.2008 17:53
Сообщение
#16
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: 0 |
Volvo, большое спасибо. На самом деле надо было просто поменять местами Px и Py. Теперь все работает. Спасибо всем кто мне помогал!
|
| Lapp |
30.09.2008 4:01
Сообщение
#17
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Я бы назвал это примечанием. Твои "формулы" - это есть функции нескольких переменных. Так? Теперь я тебе задам функцию графиком (извиняюсь за качество рисунка): Код Y| + | ______ 1+ / |/ -+--+--+--+--+--+ /| 1 X / + / | / + / | А теперь докажи, что формула У=1.5*Х - это правильная формула для этой функции.. И еще поясни, почему область Х>1 должна идти под "примечанием" Код / | 1.5*x, if x<1 y = < | 1.5, if x>=1 \ Примечания оставь для УК -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
|
Текстовая версия | 8.12.2025 11:24 |