Форум: "Media";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизЦветное изображение в чёрно-белое Найти похожие ветки
← →
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 вся ветка
Форум: "Media";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.068 c