Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2003.03.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "Media";
Текущий архив: 2003.03.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.012 c
1-17115
AZ
2003-02-22 08:56
2003.03.06
Необходимость создания кистей и перьев


14-17356
Cobalt
2003-02-18 00:55
2003.03.06
Говорят, что тут недавно была атака на сайт


1-17030
Checist [root]
2003-02-25 10:14
2003.03.06
Поиск файла в сети


6-17224
Spartak
2003-01-15 14:22
2003.03.06
Привет мастера. как вам


1-17032
Checist [root]
2003-02-25 10:06
2003.03.06
Запуск файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский