Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Масштабирование изображения 
:(
    Опции темы
Illusion Dolphin
  Дата 3.10.2004, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 13
Всего: 63



Есть картинка 1280х960 в image1 (да любая по сути, но большая), есть код:

Код

procedure TForm1.Button1Click(Sender: TObject);
var b,b1:Tbitmap;
begin
    b:=tbitmap.create;
    b.PixelFormat:=pf24bit;
    b.Assign(image1.Picture.Graphic);
    b1:=tbitmap.create;
    b1.PixelFormat:=pf24bit;
    b1.Width:=100;
    b1.height:=100;
     b1.Canvas.CopyMode:=cmSrcCopy;
     b1.Canvas.CopyRect(Rect(0,0,100,100),b.Canvas,rect(0,0,1280,960));
   canvas.Draw(0,0,b1);
   b1.Free;
   b.free;
end;


По нажатию кнопки получаем на форма рисунок, НО он очёнь сильно искажён, особенно цвета. Как сделать так, чтобы не было искажений? Если копиовать с масштабом >1, то всё просто замечательно, но при уменьшении получается бяка... Или дайте кто аналог Canvas.StretchDraw, копирующий не всё изображения, а его TRect(x,y,x1,y1)...


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
RA
Дата 3.10.2004, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 1
Всего: 115



Illusion Dolphin

Ну тут всё правильно, тоесть 100x100 должна быть бяка,
а 128х96 будет самое оно. Я хочу сказать что Высоту и ширину нужно делить на одно и тоже число если хочешь получить оптимум.


PM   Вверх
Illusion Dolphin
Дата 3.10.2004, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 13
Всего: 63



Э, нееее... 100 на 100 я выбрал так, наобум для иллюстрации факта. Не дело в том, что пропорции нарушаются, цвет сам нарушается. У меня в проекте выводится всё пропорционально, но при зуме меньше 1 получается не то... По сути stretchdraw должен аналогично работать, но он работает корректро в такой ситуайии 9вся проблема в нём то, чтог нельзя выбрать какой именно рекс он будет выводить). Мне теперь уже интересно это только из любопытства (я уже сам написал функцию для коэффициента передачи меньше единицы).\ почему же эта функция некорректно цвета выводит...


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 4.10.2004, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 16
Всего: 112



Поставь перед CopyRect такую строчку:
Код
SetStretchBltMode(b1.Canvas.Handle, STRETCH_DELETESCANS);

Добавлено @ 11:29
Или STRETCH_HALFTONE для сглаживания...




--------------------
С уважением, г-н Посол.
PM   Вверх
imageman
Дата 4.10.2004, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.9.2004

Репутация: нет
Всего: 1



видимо уменьшение идет Nearest. При небольших уменьшениях и при уменьшении картинки с малым числом мелких деталей все должно быть нормально. Проблемы, видимо, начинаются на мелких деталях (типа мелкой клетки)? Есть разные способы избежать проблем с цветопередачей.

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

Попробуй.

А вообще - есть пакет G32 (бесплатный). Там масштабирование хорошо выполнено.
PM MAIL   Вверх
p0s0l
Дата 4.10.2004, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 16
Всего: 112



Нет, дело не в Nearest. Если бы было так, то Illusion Dolphin и жаловаться не стал бы. Строка STRETCH_DELETESCANS как-раз таки и делает масштабирование, по качеству схожее с выбором ближайшей точки (Nearest). Без этой строки цвета складываются то ли с помощью OR, то ли с помощью AND (проверить надо) - что, конечно же, в результате даёт искажения...



--------------------
С уважением, г-н Посол.
PM   Вверх
Illusion Dolphin
Дата 4.10.2004, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 13
Всего: 63



Цитата
Код
SetStretchBltMode(b1.Canvas.Handle, STRETCH_DELETESCANS);

Точно... С этим тот код работает 8). Думал уже повсюду поставить, но нашёлся ещё один глюк 8). Теперь опять же из любопытства (всё равно я все эти функции пеерписал на свой лад) - если я использую флаг STRETCH_HALFTONE, то сглаживание (коряво, но факт) происходит, однако при зуме около 15-16 происходит переключение на вывод как при STRETCH_DELETESCANS - т.е. сглаживание отключается... Почему это может быть? Или стндартное сглаживание при больших коэффициентах просто не работает по задумке microsoft?
imageman: не, всё немного не так... Делать ещё и размытие - это уже черезчур... Я же говорю, что я знаю, как сделать всё красиво, но так получается, естественно, медленнеею Так у меня в проге есть галочка типа "использовать качественную прорисовку"
, и теперь я делаю "некачественную" (когда галочка отключена), пытаясь использовать стандартные подходы.


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 5.10.2004, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 16
Всего: 112



У меня сглаживание отключается при увеличении более чем в 4 раза... sad.gif
Почему - не понял, и в MSDN не сказано нислова про какие-нибудь ограничения StretchBlt...



--------------------
С уважением, г-н Посол.
PM   Вверх
imageman
Дата 5.10.2004, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.9.2004

Репутация: нет
Всего: 1



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

Сделайте уменьшение средствами фотошапа (например) и вашими средствами.

У меня ни STRETCH_DELETESCANS, ни STRETCH_HALFTONE не давал даже приемлимого результата (почти наверняка nearest технология применяется). Зато, как подозреваю, быстро :-)
PM MAIL   Вверх
Illusion Dolphin
Дата 5.10.2004, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 13
Всего: 63



Цитата
Для проверки кода уменьшение

С уменьшением уже разобрались, это пройденный этап, интересно теперь узнать про глюк с увеличением...
Цитата
У меня ни STRETCH_DELETESCANS, ни STRETCH_HALFTONE не давал даже приемлимого результата

Конечно, но это, собственно и пишется...


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 5.10.2004, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 16
Всего: 112



Кстати, через API нормально масштабируетс при любом увеличении...
Потом выложу пример...


--------------------
С уважением, г-н Посол.
PM   Вверх
imageman
Дата 10.3.2006, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.9.2004

Репутация: нет
Всего: 1



p0s0l, так и не выложил smile
PM MAIL   Вверх
Date
Дата 23.3.2006, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.3.2006
Где: Алматы

Репутация: нет
Всего: 3



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

Дело даже не в примере а в алгоритме..
--------------------
Люди не будьте свиньями, Бросайте мусор в урны.
PM MAIL WWW   Вверх
Snowy
Дата 23.3.2006, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 18
Всего: 484



При открытии AutoSize := false; Stretch := true;
А далее наоборот - Stretch := false; AutoSize := true;
PM MAIL   Вверх
Date
Дата 24.3.2006, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.3.2006
Где: Алматы

Репутация: нет
Всего: 3



Большое Спасибо...
очь выручили.
--------------------
Люди не будьте свиньями, Бросайте мусор в урны.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0914 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.