Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.04;
Скачать: CL | DM;

Вниз

Нужна помощь по работе с FastLib   Найти похожие ветки 

 
ma5ter ©   (2006-07-02 19:37) [0]

Библиотека хорошая. Вот только примеров маловато будет. Да и дока оставляет жедать лучшего. В общем у меня задача увеличить часть картинки (или всю картинку). Как сделать? Нужен очень простой и понятный пример по работе с картинкой (яркость, контрастность, размер, смещение и пр.) А то получается, что компонента здравая, а чтоб понять что в ней есть надо код перелопатить. Есть наверное стандартные алгоритмы работы с ней.


 
Sapersky   (2006-07-03 03:53) [1]

Увеличение/уменьшение - FastSize.pas -> FastResize/Bilinear.
Перед вызовом задать нужные размеры результирующей картинке (SetSize). У исходной, само собой, они тоже должны быть ненулевые.
Яркость/констрастность - FastFX.pas -> Lightness/Contrast.
Работа с фрагментом картинки без копирования:
Part := TFastDIB.Create;
Part.SetSubset(SrcImage, Left, Top, Width, Height);
// нужные операции с Part
Part.Free;
Относительно яркости/контрастности есть такая особенность - у 8-битных картинок она применяется к палитре, т.е. всё равно подействует на всю картинку.


 
ma5ter ©   (2006-07-03 17:40) [2]

Спасиб. Да понять не мог, почему делаю как в примере - 50х50 то получится то нет. Вылетает по ошибке в случае обращения к памяти по такому-то адресу (Bilinear, FastResize).Вставляю пример в свой код (отдельной процедурой) - работает на-ура. Идеологию примерно понял.
Есть чуток вопросов по работе с библиотекой:
1) Обязательно ли выводить картинку на TImage? Можно ли выводить на другой контекст отображения? Как это сделать?
2) Что такое freeHandle? Я понимаю, что пока я его не сделаю false картинку забрать не получится. Что при этом происходит?
3) Почему при смещении картинки она циклически появляется с другой стороны? Можно ли этого избежать?
4) Что делает convert и makecopy? Почему при конверсии в больший размер картинка не конвертируется, а проявляется своеобразным образом - черное поле и внизу две копии исходного изображения плохого качества?


 
Sapersky   (2006-07-04 12:49) [3]

1) Например, на форму: FDIB.Draw(Form1.Canvas.Handle, 0, 0), аналогично на PaintBox. Делать это желательно в OnPaint формы/PaintBox"а.

2) Если это относится к фрагменту
 Tmp.FreeHandle:=False;
 Image.Picture.Bitmap.Handle:=Tmp.Handle;
 Tmp.Free;
 Image.Refresh;
FreeHandle:=False в данном случае делается для того, чтобы при дальнейшем уничтожении TFastDIB"а его handle (т.е. фактически сама картинка в представленнии Windows) "остался в живых", т.к. он будет использоваться в TImage и - надеюсь - уничтожится при его освобождении.
Смысл всех этих манипуляций - загнать TFastDIB в TImage без копирования картинки (копируется только Handle).
Можно и с копированием, это более ресурсоёмко, но проще для понимания:
With Image.Picture do begin
 Bitmap.Width := Tmp.Width; Bitmap.Height := Tmp.Height;
 Tmp.Draw(Bitmap.Canvas.Handle, 0, 0);
end;
Tmp.Free;

3) Смещение - через Transform? Ну, видимо, цикличность там сделана специально. Вообще Transform больше для вращения/масштабирования, чем для смещения. Если нужно смещением - проще нарисовать картинку конкретно в нужном месте FDIB.Draw(DC, X, Y).

4) Convert преобразует глубину цвета, а не размер картинки. Размеры должны быть одинаковыми.
MakeCopy - создаёт картинку такого же размера и опционально копирует содержимое.



Страницы: 1 вся ветка

Текущий архив: 2007.03.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.035 c
2-1171397906
иван8511
2007-02-13 23:18
2007.03.04
Удаление старых файлов


3-1165645262
Ulugbek
2006-12-09 09:21
2007.03.04
Mysql 5 Ошибка в запросе unkown column g.kod_ms in on clause


15-1171030647
clickmaker
2007-02-09 17:17
2007.03.04
patch.exe для win32


15-1170648538
Slider007
2007-02-05 07:08
2007.03.04
С днем рождения ! 5 февраля


15-1170673509
SergP
2007-02-05 14:05
2007.03.04
TFT-мониторы.