-
Доброго времени суток.
У меня вопрос такой :
Как можно реализовать на Delphi такой фильтр Stained Glass (Фотошоп).
У меня есть догадки.
Нужно просто нарисовать отрезки поверх картинки указаной толщины.
Но каков алгоритм определения точек по которым будем рисовать отрезки, сказать затрудняюсь.
И ещё как можно реализовать осветление и затемнение картинки? -
Игорь Шевченко © (02.11.09 22:24) [1]
> И ещё как можно реализовать осветление и затемнение картинки?
применить к каждому пикселю преобразование из RGB в HLS, увеличить/уменьшить L, преобразовать обратно в RGB -
Омлет © (02.11.09 22:43) [2]> И ещё как можно реализовать осветление и затемнение картинки?
Упрощенный метод:function ByteLimit(Value: Integer): Byte;
begin
if Value < 0 then
Result := 0
else if Value > 255 then
Result := 255
else
Result := Value;
end;
procedure LightDark24Bit(Bmp: TBitmap; Value: Integer);
{
Сделать светлее - Value > 0
Cделать темнее - Value < 0
}
var
P : PByteArray;
X, Y : Integer;
BytesInScanLine : Integer;
DIB : TDIBSection;
begin
if (Bmp.PixelFormat = pf24Bit) and
(GetObject(Bmp.Handle, SizeOf(DIB), @DIB) = SizeOf(DIB)) and
(DIB.dsBmih.biHeight > 0) and (Value <> 0) then
begin
BytesInScanLine := (((DIB.dsBmih.biWidth * DIB.dsBmih.biBitCount) + 31) and not 31) div 8;
P := DIB.dsBm.bmBits;
for Y := DIB.dsBmih.biHeight - 1 downto 0 do
begin
for X := 0 to (DIB.dsBmih.biWidth - 1) * 3 do
P[X] := ByteLimit(P[X] + Value);
Integer(P) := Integer(P) + BytesInScanLine;
end;
end;
end; -
antonn © (03.11.09 12:52) [3]затемнение фигня, это не сложно. А вот загенерить маску витража - там да...
-
Sapersky (03.11.09 17:29) [4]http://www.blackpawn.com/texts/cellular/default.html
Ну или можно поискать по теме "диаграмма Вороного".