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

Вниз

Цветное изображение в чёрно-белое   Найти похожие ветки 

 
Japan   (2003-12-17 19:29) [0]

Как преобразовать цветное изображение (bmp) в чёрно-белое?


 
miek ©   (2003-12-17 22:24) [1]

Есть пиксел RGB. Самый простой способ - сложить R,G,B, потом разделить на 3 (получив, допустим, D) и записать пиксел DDD.


 
Japan   (2003-12-18 00:42) [2]

Если так для каждого пикселя делать, то это слишком долго получается, если картинка большая.
Есть ли более быстрый способ?


 
Asteroid ©   (2003-12-18 03:24) [3]

Черно-белое или с оттенками серого?
А для каждого пикселя так или иначе придется.


 
REP ©   (2003-12-18 12:30) [4]

>>Есть пиксел RGB. Самый простой способ - сложить R,G,B, потом разделить на 3 (получив, допустим, D) и записать пиксел DDD.

Так нельзя. У каждого цвета своя интенсивность. Не помню сейчас формулу. Там у каждого цвета свои коэффициенты.


 
Awod   (2003-12-18 13:05) [5]

Не помню как это делается, но у меня есть код программы, который когда то писался для компутерной графики в институте, который переводит картинку в чёрнобелое изображение. Если нужно, могу выслать


 
Sergio Bassy   (2003-12-18 13:19) [6]

>Если так для каждого пикселя делать, то это слишком долго >получается, если картинка большая.
иначе - только пользоваться доп. библиотеками, что тебе, как новичку, затруднительно. тебе проще- попиксельно.
>Есть ли более быстрый способ?
более быстрый (по сравнению с работой через канву) - это используй ScanLines.


 
Sergio Bassy   (2003-12-18 13:22) [7]

формула преобразования в оттенки серого:
c=0.3r+0.59g+0.11b


 
Sergio Bassy   (2003-12-18 13:24) [8]

Если тебя интересуют градации серого, то можешь юзать одну из таких формул:
1. Y=0.36*R + 0.53*G + 0.11*B
R=G=B=Y

2. Стандаpт CCIR 601-1 (как в стандаpтной VGA-ой функции):
Gray=(299*Red+587*Green+114*Blue)/1000.

3. Стандаpт CCIR 709:
Gray=(213*Red+715*Green+72*Blue)/1000.

4. Стандаpт ITU:
Gray=(222*Red+707*Green+71*Blue)/1000.

Если же тебе надо получить двухцветное изображение, то следует применять алгоритмы дизеринга, например Floyd-Steinberg Dithering. Простое отсечение порога(без дизеринга) Gray=(Gray>127)?255:0 не является удовлетворительным решением.


 
bolegator ©   (2003-12-18 19:28) [9]

procedure ConvertToBW(bitmap:TBitmap; Threshold:integer);
var
x,y,v,b,mR,mG,mB:integer;
  newbmp:TBitmap;
  p1:pRGB;
  p2:pbyte;
begin
if Bitmap.Pixelformat<>pf24bit then exit;
  newbmp:=TBitmap.Create;
  newbmp.Width:=bitmap.Width;
  newbmp.Height:=bitmap.Height;
  newbmp.PixelFormat:=pf1bit;
  for y:=0 to bitmap.height-1 do begin
   p1:=bitmap.ScanLine[y];
     p2:=newbmp.ScanLine[y];
 for x:=0 to bitmap.width-1 do begin
      b:=x mod 8;
      with p1^ do
       v:=(r*21 + g*71 + b*7) div 100;
        if v>=Threshold then
   p2^:=p2^ or bitmask[b]
        else
           p2^:=p2^ and (not bitmask[b]);
        inc(p1);
        if b=7 then
         inc(p2);
   end;
  end;
  CopyBitmap(newbmp,bitmap);
  newbmp.free;
end;

Threshold=150..220


 
bolegator ©   (2003-12-18 19:30) [10]

const bitmask:array [0..7] of byte=($80, $40, $20, $10, $08, $04, $02, $01);


 
Asteroid ©   (2003-12-18 23:43) [11]

И у всех свои формулы :)


 
bolegator ©   (2003-12-19 12:31) [12]

Только у одних color-> gray
а у других color->bw


 
Ангел. ©   (2003-12-21 17:48) [13]

Как вариант почитай в хелпе по дельфи про TBitmap А конкретно пиксельформат и монохороме :)



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

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

Наверх




Память: 0.49 MB
Время: 0.031 c
8-1076941731
kopcap
2004-02-16 17:28
2004.04.11
Как быстрее выводить спрайт


6-1079210061
Russu
2004-03-13 23:34
2004.04.11
ClientSocket+Proxy


14-1079600414
Aristarh
2004-03-18 12:00
2004.04.11
Помогите перевести (рус->англ)


1-1079900343
Nekto
2004-03-21 23:19
2004.04.11
Процессы


6-1076265604
человек в сети
2004-02-08 21:40
2004.04.11
подскажите пожалуйста книгу или доку по написанию чата для локалы