Сжатие изображения на лету

Тема в разделе "WASM.WIN32", создана пользователем witcher, 18 дек 2006.

  1. witcher

    witcher New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2006
    Сообщения:
    73
    Есть изображение которое хранится в байтовом массиве.
    Оно было получено через функцию GetDIBits();
    Размер его получился очень большой.
    Есть ли какието стандартные или не стандартные способы его сжать.
     
  2. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    дык от самого изображения зависит - если полноцветное - то пнг можно заюзать, если 256 - палитра, и т.д.
     
  3. witcher

    witcher New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2006
    Сообщения:
    73
    Изображение полноцветное.
    BITMAP.
    Сжимать надо его не записуя в файл.
    Если можно хотелось бы увидеть какойнибудь алгоритм.
     
  4. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    во-первых если оно полноцветное, то сильно его не сожмешь (зависит, правда, от самой картинки), а во-вторых я особо смысла не вижу - расходы на сжатие и разжатие будут большие, да и работать не очень удобно, короче, тут куча ньюансов.
     
  5. uni

    uni New Member

    Публикаций:
    0
    Регистрация:
    23 май 2005
    Сообщения:
    67
    Да, эт точно. Полноцветное изображение RGB сначала переводится в другую цветовую схему, где потеря при сжатии информации о цвете (цветовом слое) не исказит сильно саму картинку после разжатия. Ведь можно RGB разложить по R, G, B и сжимать по-отдельности, но результат совмещения потом после разжатия и совмещения каналов будет насколько мне известно неестественный. Потому сложное это дело, тем более какой алгоритм. Можно диссертацию защитить после написания такого кодека. Если нужно пожать в памяти, то видимо следует искать стандартные функции из каких библиотек сторонних или тех, что входят в ОС. Таких API не знаю. В принципе преобразовать в другую цветовую модель не сложно, но вот алгоритм сжатия каналов реализовывать - это да-а. Зависит от изображения, если "гладкое" в смысле низкочастотности спектра по Фурье (или вейвлетам), то тут jpeg можно применять - он пожмёт. Если изображение большое и имеет в себе лишь несколько цветов в палитре и огромные "пустоты" типа когда на белой кавне нарисовали пару кружочков, то тут можно обойтись какой модификацией RLE алгоритма - пожмёт и ещё как и без потерь.
    Трудный енто вопрос.
     
  6. witcher

    witcher New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2006
    Сообщения:
    73
    А можно ли для сжатия фоспользоваться библиотекой QuickTime SDK
     
  7. opennetworks

    opennetworks New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    436
    У меня только на PHP есть ---- Пример с четырехугольным квадратом
     
  8. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    >Пример с четырехугольным квадратом

    Какой странный квадрат...
     
  9. _SaNitAr

    _SaNitAr New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2006
    Сообщения:
    68
    kero
    жжешь
     
  10. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    ага, а овал - это круг, вписанный в квадрат 2х4 :)
     
  11. Nikolay_1

    Nikolay_1 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2006
    Сообщения:
    11
    А можно мне пример с этим квадратом?
     
  12. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia
    Не используйте функцию GetDiBits, или когда-нибудь получите BSOD.
     
  13. witcher

    witcher New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2006
    Сообщения:
    73
    А что использовать тогда.
     
  14. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    CreateDIBSection например
     
  15. witcher

    witcher New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2006
    Сообщения:
    73
    Шорошо а есть какието библиотеки чтобы сжать файл типа BMP
    в JPG
     
  16. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    gdi+ например :)
     
  17. witcher

    witcher New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2006
    Сообщения:
    73
    А разве там это есть
     
  18. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Есть.
     
  19. witcher

    witcher New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2006
    Сообщения:
    73
    И как эту функцию завут ?
     
  20. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine