![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Neon6868 |
![]() ![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: ![]() ![]() ![]() |
Необходимо написать программу на C++ для перевода из цветовой схемы YUV в HSV. Но для этого сначала необходимо переводить в RGB, а затем в нужную цветовую схему. Я создал свой класс и объект этого класса. Затем пытаюсь присвоить полю этого объекта число. Программа компилируется (пишет что ошибок нет), но при запуске программы после нажатия кнопки перевести выдается ошибка: "Access violation at adress 00401BB1 in module Project1.exe. Write of adress 00000000" Подскажите в чем ошибка? Я не уверен что выложил нужный код, а все файлы нельзя загрузить.
//--------------------------------------------------------------------------- Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата а все файлы нельзя загрузить А все и не надо. Ты покажи, как работаешь с классом, и определение самого класса. |
andriano |
![]()
Сообщение
#3
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: ![]() ![]() ![]() |
И еще: непонятно, зачем двухстуенчатое преобразование через RGB, если требуется не универсальный конвертер, а лишь преобразование одного наперед заданного формата в другой наперед заданный.
|
Neon6868 |
![]() ![]()
Сообщение
#4
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: ![]() ![]() ![]() |
И еще: непонятно, зачем двухстуенчатое преобразование через RGB, если требуется не универсальный конвертер, а лишь преобразование одного наперед заданного формата в другой наперед заданный. Дело в том, что на лекции мы рассматривали только такой способ. Поэтому таким образом и надо сделать программу. С прошлым вопросом я разобрался - легче использовать обычную переменную. Но при запуске программы после нажатия кнопки перевести выдается ошибка: "is not a valid floating point value" Подскажите плиз в чем дело? //--------------------------------------------------------------------------- Сообщение отредактировано: Neon6868 - 15.09.2008 16:03 |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Цитата Подскажите плиз в чем дело? В том, что на момент нажатия кнопки у тебя в Y->Text строка, которая не является правильной записью числа. Особое внимание обрати на DecimalSeparator, это очень часто упускают из виду... |
Neon6868 |
![]()
Сообщение
#6
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: ![]() ![]() ![]() |
|
Neon6868 |
![]()
Сообщение
#7
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: ![]() ![]() ![]() |
Написал я полностью программу, а она почему-то абсолютно все неправильно считает, хотя делал все по формулам. Ошибка доже при переводе из YUV в RGB, хотя там вроде даже негде ошибиться. Может кто знает в чем проблема? Заранее спасибо!
//--------------------------------------------------------------------------- Сообщение отредактировано: Neon6868 - 17.09.2008 0:28 |
Neon6868 |
![]() ![]()
Сообщение
#8
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: ![]() ![]() ![]() |
Подправил программу, но несколько проблем осталось. При переводе из 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 |
![]()
Сообщение
#9
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: ![]() ![]() ![]() |
Неужели никто не знает в чем причина? Если кто знает, подскажите пожалуйста.
|
Lapp |
![]()
Сообщение
#10
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
1. Твои формулы явно отличаются от приведенных Википедии http://ru.wikipedia.org/wiki/YUV (кстати, если говоришь про внешний источник, приводи точные ссылки, не заставляй людей искать).
2. Откуда взяты значения, которые ты называешь максимальными? Я не спец по цветоделению, как и большинство народа тут, думаю, так что ты приводи побольше инфы, если хочешь получить помощь. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Neon6868 |
![]()
Сообщение
#11
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: ![]() ![]() ![]() |
1. Твои формулы явно отличаются от приведенных Википедии http://ru.wikipedia.org/wiki/YUV (кстати, если говоришь про внешний источник, приводи точные ссылки, не заставляй людей искать). 2. Откуда взяты значения, которые ты называешь максимальными? Я не спец по цветоделению, как и большинство народа тут, думаю, так что ты приводи побольше инфы, если хочешь получить помощь. Мои формулы правильные, надо было при получении значения больше, чем 255, просто записать 255. Так что с этим разобрался. Осталось только понять, почему функция atan2 возвращает неправильные значения. |
Lapp |
![]()
Сообщение
#12
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Трудно и неинтересно разговаривать с человеком, который на каждом шагу твердит:
Формулы правильные, Мои формулы правильные, - хотя тут же говорит обратное:надо было при получении значения больше, чем 255, просто записать 255. Ибо это, если оно так, тоже есть часть формулы, если его нет - о какой такой правильности ты говоришь?..И почему ты с такой легкостью отвергаешь формулы и Вики, сеачала сказав, что они такие же?.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Осталось только понять, почему функция atan2 возвращает неправильные значения. atan2 возвращает неправильные значения, когда получает неправильные параметры. Я не знаю, какими тестами ты проверяешь правильность, но если хочешь - приведи значения R, G, B, при которых по-твоему происходит ошибка (не забудь также написать, что ты ожидаешь увидеть в качестве результата).И не надо говорить, что это не работает для любых исходных данных, потому что:
|
Neon6868 |
![]() ![]()
Сообщение
#14
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: ![]() ![]() ![]() |
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 |
![]()
Сообщение
#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 |
![]()
Сообщение
#16
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: ![]() ![]() ![]() |
Volvo, большое спасибо. На самом деле надо было просто поменять местами Px и Py. Теперь все работает. Спасибо всем кто мне помогал!
![]() |
Lapp |
![]()
Сообщение
#17
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Я бы назвал это примечанием. Твои "формулы" - это есть функции нескольких переменных. Так? Теперь я тебе задам функцию графиком (извиняюсь за качество рисунка): Код Y| + | ______ 1+ / |/ -+--+--+--+--+--+ /| 1 X / + / | / + / | А теперь докажи, что формула У=1.5*Х - это правильная формула для этой функции.. И еще поясни, почему область Х>1 должна идти под "примечанием" ![]() Код / | 1.5*x, if x<1 y = < | 1.5, if x>=1 \ Примечания оставь для УК ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 3:19 |