Форум: "Media";
Текущий архив: 2007.03.04;
Скачать: [xml.tar.bz2];
ВнизНужна помощь по работе с 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 вся ветка
Форум: "Media";
Текущий архив: 2007.03.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.049 c