WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Уменьшение картинки или StretchBlt(...)

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Уменьшение картинки или StretchBlt(...)
SUnteXx опубликован 11-11-2001 19:40 MSK   Click Here to See the Profile for SUnteXx   Click Here to Email SUnteXx  
Почему при ипользовании ф-ции StretchBlt(...) ф-ция фигово сжимает картинку, т.е. плохо ее рисует при уменьшении!

Т.е. у меня есть картинки из оттенков серого (задний фон ACDSee v.4.0, может кто знает!?)(черного нет), а когда уменьшаю где-то до 85% и меньше, то получается, что ни с того ни с сего часть точек черные, часть серые, .... Как можно исправить этот косяк! Или есть альтернативы уменьшения/увеличения картинки - подскажите!

HOMO_PROGRAMMATIS опубликован 11-11-2001 21:27 MSK     Click Here to See the Profile for HOMO_PROGRAMMATIS  Click Here to Email HOMO_PROGRAMMATIS     
Есть такой фильтр, blur называется. Ты с легкостью найдешь его в журнале программист №1 или в инете.
SUnteXx опубликован 12-11-2001 00:31 MSK     Click Here to See the Profile for SUnteXx  Click Here to Email SUnteXx     
Так ведь это уже размазывание получается!
Что, вы хотите сказать, что ACDSee тоже размазывает картинку при приближении??? Думую нет!? Да, может у них свои методы, тогда какие могут быть методы увеличения/уменьшения картинки???
Если кто не жадный, можите кинуть исходничок на SUnteXx@pisem.net!
Kosha опубликован 12-11-2001 01:02 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
Насколько я помню те дни, когда досконально копал GDI, StretchBlt для скорости не экстраполирует соседние пиксели. Поясню на примере.

Есть 3 пикселя (допустим, в строку).
В идеале, если они при уменьшении попадают в один, программа должна считать средний цвет.

StretchBlt по-моему этого не делает. Потом, насколько я помню, эта функция вообще некорретно уменьшает изображения и искажает цвета. Либо бери DirectX, либо уменьшай в Фотошопе, либо пиши сам.

Но можно изменить (или расшифровать?) идею HOMO_PROGRAMMATIS'а - блюрить картинку не после, а до уменьшения. Тогда и StretchBlt с экстраполяцией не наврет.

Потом, проверь цветовой формат. Если не True Color, то забудь про StretchBlt.
Если допустим у тебя пиксель был какой-нить почти черный, стал чуть потемнее, а такого цвета в палитре нет, а ближайший - черный - вот и получаешь.

Так что смотри...

P.S. Часом эта моя экстраполяция не интерполяцией называется? ;-)

SUnteXx опубликован 12-11-2001 13:37 MSK     Click Here to See the Profile for SUnteXx  Click Here to Email SUnteXx     
2Kosha! Приведите пример, плз! А то я еще не копался в GDI и не сильно силен в MVC++ и английском! Плз, F1!

З.Ы.
Фотошоп не катит, т.к. картинки могут быть разные, каждый раз разная, а под DirectX'ом не работал, т.е. не знаю что к чему!

З.Ы.Ы.
Плз, сорсик кто-нить киньте!

migel опубликован 12-11-2001 13:51 MSK     Click Here to See the Profile for migel  Click Here to Email migel     
На www.codeguru.com было нечто этакое:
http://www.codeguru.com/bitmap/Fast2PassScale.html
SUnteXx опубликован 13-11-2001 00:19 MSK     Click Here to See the Profile for SUnteXx  Click Here to Email SUnteXx     
2migel: Я все понимаю, все это здорово, но мне не хотелось бы создавать новые биты картинки (а вдруг у меня картинка 8000х8000х32, а уменьшить надо в два раза - и что, будет у меня две гигантские картинки, которые хз сколько весят!), ведь StretchBlt новой картинки же не создает, а в сорсе, который вы мне дали, там создается новая картинка, а это, в данной ситуации, не покатит! Очень жаль!

Может самому можно сжать/растянуть картинку. Но как? Кто-нить может объяснит алгаритм этот или сорсик кинет (желательно в Win32Api без MFC, но и с MFC покатит!)

Благодарен всем, кто помог и кто поможет!

Kosha опубликован 13-11-2001 00:39 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
2SUnteXx: StretchBLT тоже новую картинку создает. Ну, не совсем она, но ведь она пишет на DC, в который выбран Bitmap, вот который-то и весит. Так что даже с ней ресурсы используются...

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.