![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление черного и серого из рисунка.
Карелин Артем © (2002-09-06 10:55:00)Итак, есть куча видеофайлов. В них вращается сложная спиралевидная фигура, состоящая из белых точек.
Поскольку это сжатое видео, то белые точки на черном фоне превращаются в градиент от белого до черного. Требуется быстро удалать черные и темно-серые пиксели из TBitmap.
Что посоветуете?
samvel (2002-09-06 22:27:00) [1]если все пиксели серово цвета, то значит у них R=G=B, можно
получить цвет пискеля (colortoRGB.pixels[i,j]), a потом получить
значение или R или G или B (r:=getrvalue(colortoRGB.pixels[i,j]),
a потом заменить их каким хотим:
(image1,canvas.pixels[i,j]:=RGB(r,g,b))
Карелин Артем (2002-09-06 14:47:00) [2]Распознавать не надо.
Владимир Васильев (2002-09-06 14:47:00) [3]Опечатка: ThreshOld - а то и в правильном написании неблагозвучно.
msts (2002-09-06 14:44:00) [4]а распознать фигуру случаем тоже надо?
Владимир Васильев (2002-09-06 14:42:00) [5]Предлагаю юзать G32:
Код не проверял, но должно работать
//TreshOld-величина среза по интенсивности
procedure DoIt(Dst, Src: TBitmap32; TreshOld: integer; DestColor : TColor32 );
var
I: Integer;
D, S: PColor32;
begin
CheckParams(Dst, Src);
Dst.SetSize(Src.Width, Src.Height);
D := @Dst.Bits[0];
S := @Src.Bits[0];
for I := 0 to Src.Width * Src.Height - 1 do
begin
if Intensity(S^)<TreshOld
then D^:=DestColor
else D^:=S^;
Inc(S); Inc(D);
end;
Dst.Changed;
end;
Карелин Артем (2002-09-06 14:21:00) [6]В общем надо все пиксели темнее заданного заменить на один определенный.
Владимир Васильев (2002-09-06 13:59:00) [7]Пиксели удалить нельзя - можно заменить один цвет (или диапазон цветов) на другой.
Обьясните подробнее вашу проблему.
Карелин Артем (2002-09-06 12:43:00) [8]Intel Image Processing Library:
developer.intel.com 22 мега, DLL-ки увесистые
MBo (2002-09-06 12:24:00) [9]1) самое быстрое - Intel Image Processing Library
2) получить адрес данных TBitmap, пробежать по этому куску памяти
Проще - GetDIBits, SetDIBits
3) Scanline