Форум: "Начинающим";
Текущий архив: 2009.12.20;
Скачать: [xml.tar.bz2];
Внизbmp or jpeg в черно белый Найти похожие ветки
← →
Тимофей (2009-11-02 00:44) [0]Народ нигде не нашел инфы по тому как сделать картинку черно-белой без оттенков серого. bmp or jpeg
← →
Тимофей (2009-11-02 00:49) [1]сам догодался, перевел в 1 битовый)) правда минус в том что текст стал очень тонкий))
← →
sniknik © (2009-11-02 00:50) [2]Monochrome:= true;
← →
Омлет © (2009-11-02 02:49) [3]> перевел в 1 битовый
Не тру :-/procedure BWThreshold24Bit(Bmp: TBitmap; Value: Byte = 127);
var
P : PByteArray;
XR, XG, XB : Integer;
X, Y, NVal : Integer;
BytesInScanLine : Integer;
DIB : TDIBSection;
begin
if (Bmp.PixelFormat = pf24Bit) and
(GetObject(Bmp.Handle, SizeOf(DIB), @DIB) = SizeOf(DIB)) and
(DIB.dsBmih.biHeight > 0) then
begin
BytesInScanLine := (((DIB.dsBmih.biWidth * DIB.dsBmih.biBitCount) + 31) and not 31) div 8;
P := DIB.dsBm.bmBits;
NVal := Value shl 8;
for Y := DIB.dsBmih.biHeight - 1 downto 0 do
begin
XB := 0;
XG := 1;
XR := 2;
for X := 0 to DIB.dsBmih.biWidth - 1 do
begin
{ Оптимизация для (0.299*Red + 0.587*Green + 0.114*Blue > Value) }
if 28*P[XB] + 151*P[XG] + 77*P[XR] > NVal then
begin
P[XB] := 255;
P[XG] := 255;
P[XR] := 255;
end
else begin
P[XB] := 0;
P[XG] := 0;
P[XR] := 0;
end;
Inc(XB, 3);
Inc(XG, 3);
Inc(XR, 3);
end;
Integer(P) := Integer(P) + BytesInScanLine;
end;
end;
end;
Специально фанатам ScanLine ))
← →
brother © (2009-11-02 05:00) [4]http://www.delphimaster.ru/articles/pixels/
и про сканлайн забываем навсегда ;)
← →
Anatoly Podgoretsky © (2009-11-02 09:16) [5]> Тимофей (02.11.2009 00:44:00) [0]
Ни одна система не работает напрямую в jpeg все переводят для выполнения операций в bmp
Алгоритм такой,
переводишь в bmp
затем переводишь в серый
после того отсекаешь по любой линии на шкале серого
переводишь в jpeg
← →
Anatoly Podgoretsky © (2009-11-02 09:18) [6]А теперь быстро и просто
загружешь в редактор и сохраняешь в нужном формате.
← →
Омлет © (2009-11-02 20:17) [7]> [4] brother © (02.11.09 05:00)
> http://www.delphimaster.ru/articles/pixels/
> и про сканлайн забываем навсегда ;)
Оно там заточено под TColor и универсальность в ущерб скорости.
И оно будет падать на растрах с высотой 0 или 1://базовый адрес блока данных
FStart := Integer(FBitmap.Scanline[0]);
//разность между адресами соседних строк развертки растра (обычно отриц.)
FDelta := Integer(FBitmap.Scanline[1]) - FStart;
Поэтому, статью я бы советовал только в учебных целях.
← →
Sapersky (2009-11-02 21:52) [8]Ни одна система не работает напрямую в jpeg все переводят для выполнения операций в bmp
Кое-какие операции можно делать без перепаковки, хотя преобразование в два цвета вряд ли к ним относится.
http://www.betterjpeg.com/
(Convert to Black & White (Grayscale) - это, видимо, перевод в оттенки серого, в jpeg цветность хранится отдельно от яркости, и можно её просто выкинуть).
Так, для общего развития :)
> перевел в 1 битовый
Не тру :-/
Здесь бинарные оценки типа "тру/не тру" вряд ли применимы. Тех же коэфф-тов для цветов есть несколько вариантов, и какой их них лучше - неизвестно (хотя закономерность "зелёный ярче" прослеживается везде, и насчёт чел. глаза я в курсе).
ИМХО, куда большее влияние на качество картинки оказывает дизеринг (если он приемлем в данном случае):
http://en.wikipedia.org/wiki/Dither#Dithering_algorithms
← →
Омлет © (2009-11-02 22:26) [9]> [8] Sapersky (02.11.09 21:52)
Интересная статья..
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.12.20;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c