Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > сжатие изображения


Автор: Lin07 3.10.2008, 19:33
собственно сам алгоритм мне понятен, но вот вопрос как представленно конкретное изображение
, как его изменить так ,что бы сжать(в каком виде представить?)... 

по алгаритму 

1. алгоритм RLE,
2. алгоритм LZW,
3. алгоритм Хаффмана. 

16 ричном  думаю степнь сжатию будет больно маленькая, а как проглядеть файл в двойчном я так и не понял
так же непонятно в каком формате изображение не сжато... (TIFF может?)

Автор: Master01 3.10.2008, 22:49
вообще-то не уверен что понял вопрос правильно...

но в TIFF действительно изображение может храниться в незжатом виде (а может и в сжатом), т.е. просто последовательность байтов, представляющих RGB компоненты цветов пикселей.
как-то писал функцию которая читает такое изображение, если будет интересно могу выложить.

а сорри, всё что я тут писал это к TGA относится smile

Автор: Lin07 3.10.2008, 23:07
Цитата(Master01 @ 3.10.2008,  22:49)
вообще-то не уверен что понял вопрос правильно...

но в TIFF действительно изображение может храниться в незжатом виде (а может и в сжатом), т.е. просто последовательность байтов, представляющих RGB компоненты цветов пикселей.
как-то писал функцию которая читает такое изображение, если будет интересно могу выложить.

а сорри, всё что я тут писал это к TGA относится smile


в обшем вопрос сводиться скорее к такому
что надо сделать с изображением что бы стало возможно применить на нем данные алгоритмы,? представить в бинарном виде или другое что то!

для меня изоброжение - совершенно непонятная структура файла.. так как почти все они уже в сжатых форматах !

Автор: yar 3.10.2008, 23:12
Каким-то образом получить Bitmap. Грубо говоря, массив пикселов некоторых цветов.
Возьми например BMP, он чаще всего не сжат.

А Хаффмана, и вообще, энтропийное кодирование можно применять к совершенно любому потоку байтов..

Автор: Lin07 3.10.2008, 23:21
Цитата(yar @ 3.10.2008,  23:12)
Каким-то образом получить Bitmap. Грубо говоря, массив пикселов некоторых цветов.
Возьми например BMP, он чаще всего не сжат.

А Хаффмана, и вообще, энтропийное кодирование можно применять к совершенно любому потоку байтов..

ну к примеру в паинте я тупо закрашу фон в черный и сохраню!

как мне получить этот набор байтов? 

Автор: yar 3.10.2008, 23:39
It Depends.
Если это виндоуз, то можно воспользоваться GDI+, и классом http://msdn.microsoft.com/en-us/library/ms534420(VS.85).aspx.

Автор: Lin07 3.10.2008, 23:48
Цитата(yar @ 3.10.2008,  23:39)
It Depends.
Если это виндоуз, то можно воспользоваться GDI+, и классом http://msdn.microsoft.com/en-us/library/ms534420(VS.85).aspx.

спс ша поглядим smile 

Автор: Pion 5.10.2008, 23:03
может уже не актуально, но вообще, по хорошему, чисто поток в формате RGB сжимать не стоит... если стоит задача пожать. Если нужна хорошая степень сжатия, то сначала надо сделать некоторую предобработку изображения (RGB), типа дискретного косинусного или дискретного вейвлетного преобразования...

Автор: bsa 6.10.2008, 14:41
Цитата(Pion @ 5.10.2008,  23:03)
вообще, по хорошему, чисто поток в формате RGB сжимать не стоит... если стоит задача пожать. Если нужна хорошая степень сжатия, то сначала надо сделать некоторую предобработку изображения (RGB), типа дискретного косинусного или дискретного вейвлетного преобразования...

Преобразования могут приводить к потерям, например JPEG.
Наиболее простой способ - взять файл, разбить на компоненты (т.е. на 3 массива: красной, зеленой и синей составляющих) и сжать раздельно с помощью сторонней библиотеки, например, bzip2.

Автор: Lin07 7.10.2008, 11:27
Цитата(Pion @ 5.10.2008,  23:03)
может уже не актуально, но вообще, по хорошему, чисто поток в формате RGB сжимать не стоит... если стоит задача пожать. Если нужна хорошая степень сжатия, то сначала надо сделать некоторую предобработку изображения (RGB), типа дискретного косинусного или дискретного вейвлетного преобразования...

мне такую лабу просто придеться сдавать.. и я не думаю ,чт ов ней можно пользоваться винАЙПИ можно будет...
скорее загрузить изображение - представить в 2-ичном коде..пожать этот двоичный код по данным алгоритмам...

Автор: bsa 7.10.2008, 16:26
Цитата(Lin07 @ 7.10.2008,  11:27)
мне такую лабу просто придеться сдавать.. и я не думаю ,чт ов ней можно пользоваться винАЙПИ можно будет...
скорее загрузить изображение - представить в 2-ичном коде..пожать этот двоичный код по данным алгоритмам...

Ты где про WinAPI прочитал?

Автор: Lin07 7.10.2008, 16:34
Цитата(yar @ 3.10.2008,  23:39)
It Depends.
Если это виндоуз, то можно воспользоваться GDI+, и классом http://msdn.microsoft.com/en-us/library/ms534420(VS.85).aspx.

GDI разве не реализуеться функциями винAPI... ?  smile 

Автор: bsa 7.10.2008, 16:45
Цитата(Lin07 @ 7.10.2008,  16:34)
Цитата(yar @ 3.10.2008,  23:39)
It Depends.
Если это виндоуз, то можно воспользоваться GDI+, и классом http://msdn.microsoft.com/en-us/library/ms534420(VS.85).aspx.

GDI разве не реализуеться функциями винAPI... ?  smile

Ты сам перечитай свое предыдущее сообщение и объясни, какое отношение цитата имеет к твоему ответу.
Тебе вообще предлагаются алгоритмы действий с уже распакованными данными, которые лежат в памяти в виде массива 3-х или 4-х байтных значений цвета (RGB или RGBu, u - unused).

Автор: Lin07 7.10.2008, 16:59
Цитата(bsa @ 7.10.2008,  16:45)
Цитата(Lin07 @ 7.10.2008,  16:34)
Цитата(yar @ 3.10.2008,  23:39)
It Depends.
Если это виндоуз, то можно воспользоваться GDI+, и классом http://msdn.microsoft.com/en-us/library/ms534420(VS.85).aspx.

GDI разве не реализуеться функциями винAPI... ?  smile

Ты сам перечитай свое предыдущее сообщение и объясни, какое отношение цитата имеет к твоему ответу.
Тебе вообще предлагаются алгоритмы действий с уже распакованными данными, которые лежат в памяти в виде массива 3-х или 4-х байтных значений цвета (RGB или RGBu, u - unused).

та не было не одного алгоритма(во всем треде ни одного куска кода ..ога)  smile  дали ссылку на класс битмап 

так как собственно дело не срочное и торопиться тут некуда я не спешу читать каждый метод класса .. (надо взять методичку и поглядеть как там советуеться , мжет иду немного не потому пути.....) 

а вообше думаю достаточно частое задание и надеялся получить ответы , как это было сделано другими...

все равно спс

Автор: bsa 7.10.2008, 17:04
Цитата(Lin07 @ 7.10.2008,  16:59)
та не было не одного алгоритма(во всем треде ни одного куска кода ..ога)

алгоритм != код
Код - это реализация алгоритма.

Автор: Lin07 7.10.2008, 17:06
Цитата(bsa @ 7.10.2008,  17:04)
Цитата(Lin07 @ 7.10.2008,  16:59)
та не было не одного алгоритма(во всем треде ни одного куска кода ..ога)

алгоритм != код
Код - это реализация алгоритма.

и не поспоришь  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)