Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2010, 13:33   #1
racushka_n
Пользователь
 
Аватар для racushka_n
 
Регистрация: 20.05.2010
Сообщений: 17
Сообщение JPEG сжатие на C++

Такое дело:
Задание дали по этапам:
1. Перевод RGB в YCrCb
2. Преобразование в 4:2:0 и обратно
3. По блокам 8х8 выполнить ДКП и обратно
4. Выполнить квантование Y, Cr, Cb и обратное преобразование
5. Выполнить RLE сжатие (после зигзаг-сканирования) и сохранить сжатый файл.
Первые 4 этапа я выполнила, теперь возникла сложность в том, что я не могу понять, что мне делать с массивами (Yrle, Cbrle,Crrle) после RLE сжатия, что бы получить сжатый файл (само изображение) и каким образом его сохранить (понятно что через SaveDialog, не пойму как это записать в коде)
racushka_n вне форума Ответить с цитированием
Старый 03.12.2010, 23:53   #2
MrDreyts
Новичок
Джуниор
 
Регистрация: 03.12.2010
Сообщений: 2
По умолчанию

Уважаемая, racushca_n. Мне дали аналогичное задание на курсовую работу. Я был бы крайне благодарен, если бы Вы помогли мне в последнем этапе. Проблема в том, что я не знаю, каким образом записать получившиеся после rle-преобразования вектора в файл jpeg.
MrDreyts вне форума Ответить с цитированием
Старый 04.12.2010, 05:08   #3
racushka_n
Пользователь
 
Аватар для racushka_n
 
Регистрация: 20.05.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от MrDreyts Посмотреть сообщение
Уважаемая, racushca_n. Мне дали аналогичное задание на курсовую работу. Я был бы крайне благодарен, если бы Вы помогли мне в последнем этапе. Проблема в том, что я не знаю, каким образом записать получившиеся после rle-преобразования вектора в файл jpeg.
Я сохрняла не в jpeg файл, а в rle
Запись
Код:
 TFileStream* fs = new TFileStream("file.rle", fmCreate);
fs->Write(&k, sizeof(k)); //сначала пишем размер массива
fs->Write(massiv, sizeof(massiv[0])*k); //пишем данные следом
delete fs;
Чтение:
Код:
TFileStream* fs = new TFileStream("file.rle", fmOpenRead);
fs->Read(&k, sizeof(k)); //сначала читаем размер который мы записали
fs->Read(massiv, sizeof(massiv[0])*k); //читаем данные следом
delete fs;
racushka_n вне форума Ответить с цитированием
Старый 06.12.2010, 20:07   #4
MrDreyts
Новичок
Джуниор
 
Регистрация: 03.12.2010
Сообщений: 2
По умолчанию

Спасибо.А дальше что делать с этим файлом?
Бросьте,пожалуйста,программу целиком.Очень уж хочется готовый вариант посмотреть!Тогда уж сам разберусь и не буду глупыми вопросами докучать!)Заранее огромнейшее спасибо!)
MrDreyts вне форума Ответить с цитированием
Старый 24.04.2012, 23:04   #5
TERRATOR
Новичок
Джуниор
 
Регистрация: 24.04.2012
Сообщений: 1
Смех Как сделать субдискретизацию на с++?

Цитата:
Сообщение от racushka_n Посмотреть сообщение
Такое дело:
Задание дали по этапам:
1. Перевод RGB в YCrCb
2. Преобразование в 4:2:0 и обратно
3. По блокам 8х8 выполнить ДКП и обратно
4. Выполнить квантование Y, Cr, Cb и обратное преобразование
5. Выполнить RLE сжатие (после зигзаг-сканирования) и сохранить сжатый файл.
Первые 4 этапа я выполнила, теперь возникла сложность в том, что я не могу понять, что мне делать с массивами (Yrle, Cbrle,Crrle) после RLE сжатия, что бы получить сжатый файл (само изображение) и каким образом его сохранить (понятно что через SaveDialog, не пойму как это записать в коде)
Народ нужна ваша помощь! Я блин полный тормоз, не могу понять как же выполнить этап субдискретизации, то есть этап 2. Преобразование в 4:2:0 и обратно

кто знает как это сделать, вот код 3 матриц YCbCr

TRGBTriple *Row;
for (int y = 0; y < Form1->Image2->Height; y++) {
Row = (TRGBTriple*) Form1->Image2->Picture->Bitmap->ScanLine[y];
for (int i = 0; i < Form1->Image2->Width; i++)
{
ycbcr[0][y][i] = (0.299*Row[i].rgbtRed) + (0.587*Row[i].rgbtGreen) + (0.114*Row[i].rgbtBlue);
ycbcr[1][y][i] = -0.168736*Row[i].rgbtRed - 0.3313*Row[i].rgbtGreen + 0.5*Row[i].rgbtBlue + 128;
ycbcr[2][y][i] = 0.5*Row[i].rgbtRed - 0.4187*Row[i].rgbtGreen - 0.0813*Row[i].rgbtBlue+128;
}
}

буду очень признателен за помощь
TERRATOR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сжатие данных Horknee Свободное общение 18 10.05.2010 11:21
сжатие фотографий AnKor94 Общие вопросы Delphi 1 15.03.2010 00:18
Сжатие Хаффмена zgest Общие вопросы C/C++ 1 23.03.2009 23:23
Сжатие строК! prizrak1390 Общие вопросы Delphi 16 02.01.2008 17:15
Сжатие битмапа Rapid Мультимедиа в Delphi 7 08.12.2007 16:38