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

Вниз

Как   Найти похожие ветки 

 
ivanivan ©   (2002-11-19 06:40) [0]

Есть картинка определенного размера. Как оставить только тот цвет, которого меньше всего на картинке, перекрасить его в черный, а все остальные в белый?

Если можно превидите пример

Заранее спасибо!!!


 
MBo ©   (2002-11-19 07:39) [1]

Придется пробежать по всем пикселам, посчитать количество.
Долго - Canvas.Pixels[]
Быстрее - ScanLine


 
ivanivan ©   (2002-11-19 08:32) [2]

Вообще я примерно так и представлял это себе, но как КОНКРЕТНО ?
Можно кусок исходняка?


 
MBo ©   (2002-11-19 08:52) [3]

пример в хелпе на scanline имеется


 
Fenik ©   (2002-11-24 11:40) [4]

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


{ **** UBPFD *********** by delphibase.endimus.com ****
>> Функция возвращает колличество уникальных цветов Bitmap

Зависимости: Graphics
Автор: Nikolas Chook, chook_nu@uraltc.ru, Новоуральск
Copyright: Собственное написание (Николай федоровских)
Дата: 1 июня 2002 г.
***************************************************** }

function HowManyColors(Bitmap: TBitmap): Integer;
type
TRGB = record
B, G, R: Byte;
end;
pRGB = ^TRGB;

var i: Byte;
x, y: Integer;
Dest: pRGB;
RGBArray: array [0..255, 0..255] of array of Byte;
begin
Bitmap.PixelFormat := pf24Bit;
Result := 0;
for y := 0 to Bitmap.Height - 1 do begin
Dest := Bitmap.ScanLine[y];
for x := 0 to Bitmap.Width - 1 do begin
with Dest^ do
if RGBArray[r, g] <> nil then
for i := 0 to High(RGBArray[r, g]) do begin
//если такой цвет уже есть, то выходим из цыкла
if RGBArray[r, g] [i] = b then Break;
//если это последний круг цикла, то такого цвета нет
if i = High(RGBArray[r, g]) then begin
Inc(Result); //прибавляем один цвет
SetLength(RGBArray[r, g], Length(RGBArray[r, g]) + 1);
RGBArray[r, g] [High(RGBArray[r, g])] := b;
end;
end
else begin
Inc(Result);
SetLength(RGBArray[r, g], 1);
RGBArray[r, g] [0] := b;
end;
Inc(Dest);
end;
end;
end;



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

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

Наверх




Память: 0.47 MB
Время: 0.046 c
1-17082
IVANOV
2003-02-22 08:16
2003.03.06
Использование курсоров *.cur


14-17342
anbezr
2003-02-17 17:19
2003.03.06
Динамический массив


1-17087
ark
2003-02-25 21:34
2003.03.06
try.....exception


3-16853
Alex_xelA
2003-02-14 11:07
2003.03.06
ADO


14-17264
copyr25
2003-02-19 06:06
2003.03.06
Баннеромантия