Главная страница
    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.56 MB
Время: 0.037 c
1-17189
Vadim840
2003-02-24 12:46
2003.03.06
Поиск файла


14-17324
jen_bond
2003-02-17 08:07
2003.03.06
Автозапуск при вставлении cd-диска


1-17190
Жорж
2003-02-24 13:09
2003.03.06
перетаскивание в TTreeView


14-17314
Zhenka
2003-02-16 12:50
2003.03.06
Хороший тон программирования


1-17153
МахмуД
2003-02-22 19:05
2003.03.06
Господа! Как при выходе из ColorDialog получить цвет форматаRGB?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский