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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2016, 22:32   #1
greenisius
Пользователь
 
Регистрация: 06.11.2012
Сообщений: 67
По умолчанию CopyRect картинка резко теряет качество

Что есть:



Что делаем:

Код:
      Img.Canvas.CopyRect(Img.ClientRect, Image.Canvas,
        Rect(0, 0, SourseImage.Width ,SourseImage.Height);
Что получаем:



CopyRect нужна, чтобы разрезать изображение в мозаику. Сам факт использования функции резко ухудшает качество.
Может я не использую какие-то механизмы, регулирующие качество?

Последний раз редактировалось greenisius; 05.04.2016 в 22:35.
greenisius вне форума Ответить с цитированием
Старый 06.04.2016, 00:12   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Для начала:
1. Не работай с картинками через TImage.
2. Не используй сжатие с потерями качества (jpeg).
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 06.04.2016, 00:27   #3
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

Цитата:
Сообщение от greenisius Посмотреть сообщение
Может я не использую какие-то механизмы, регулирующие качество?
PixelFormat из SourceImage вначале ставь.
Vapaamies вне форума Ответить с цитированием
Старый 06.04.2016, 00:38   #4
greenisius
Пользователь
 
Регистрация: 06.11.2012
Сообщений: 67
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Для начала:
1. Не работай с картинками через TImage.
2. Не используй сжатие с потерями качества (jpeg).
1) Твои предложения? Мне нужна канва, чтобы отрезать кусочки.
2) Такой результат даже с bmp, это не из-за jpg сжатия
greenisius вне форума Ответить с цитированием
Старый 06.04.2016, 00:47   #5
greenisius
Пользователь
 
Регистрация: 06.11.2012
Сообщений: 67
По умолчанию

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
PixelFormat из SourceImage вначале ставь.
Код:
    Image.Picture.LoadFromFile(InputPath);
    Image1.Picture.Bitmap.PixelFormat := Image.Picture.Bitmap.PixelFormat;
    Image1.Canvas.CopyRect(Image1.ClientRect, Image.Canvas,
        Rect(0, 0, Image.Width, Image.Height));
Он вообще ничего не копирует.
greenisius вне форума Ответить с цитированием
Старый 06.04.2016, 02:01   #6
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

Цитата:
Сообщение от greenisius Посмотреть сообщение
Код:
        [...] Image.Width, Image.Height));
Чему в это время равны?
Vapaamies вне форума Ответить с цитированием
Старый 06.04.2016, 06:10   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Я бы канвас.копирект вообще не советовал использовать независимо от битности (хотя в данном случае проблема именно в ней), потому как внутри он реализован через StretchBlt, с которым нужно постараться, чтобы получить приемлемый результат. Особенно если размеры копируемой области такие же как у целевой, то лучше BitBlt, а если разные, то использовать настройку/надстройку(нормальную) StretchBlt, например фильтр задействовать не Nearest, а Bicubic. А в идеале взять какую-то библиотеку специализированную, вроде Graphics32 , FastLib.

Планы-то, кстати, какие вообще ? Пазл сделать ? Тогда вот полезная тема
вот моя функция из моего же старого недодвижка для копиректа один в один через BitBlt c копиректо-подобными параметрами
phomm вне форума Ответить с цитированием
Старый 06.04.2016, 12:48   #8
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию

рекомендую FastDIB или WinAPI StretchBlt\BitBlt\PlgBlt Если нужно изменить размер - используется StretchBlt с выставленным HALFTONE (если уменьшаешь).
IvaniuS вне форума Ответить с цитированием
Старый 07.04.2016, 13:00   #9
greenisius
Пользователь
 
Регистрация: 06.11.2012
Сообщений: 67
По умолчанию

Цитата:
Сообщение от IvaniuS Посмотреть сообщение
рекомендую FastDIB или WinAPI StretchBlt\BitBlt\PlgBlt Если нужно изменить размер - используется StretchBlt с выставленным HALFTONE (если уменьшаешь).
Решил вопрос через BitBlt, спасибо
greenisius вне форума Ответить с цитированием
Старый 20.04.2016, 22:56   #10
Turbine
Пользователь
 
Регистрация: 13.08.2008
Сообщений: 76
По умолчанию

Тут, видимо, проблема с битностью цвета судя по картинкам
Turbine вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TStringList и Oбъекты. При уничтожении StringLIst - теряет обьекты? Человек_Борща Общие вопросы Delphi 9 09.01.2013 14:59
DSL-модем теряет Интернет при нагрузке Arigato Компьютерное железо 6 25.09.2012 22:28
WebBrowser теряет все куки alexplato Общие вопросы .NET 2 28.12.2010 08:58
Резко растет размер файла Excel Pavel Ketkov Microsoft Office Excel 2 08.12.2009 09:22
К Новому году все резко покупают сразу по ТРИ НОУТБУКА! mihali4 Свободное общение 9 16.12.2008 13:37