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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
15-1256164130
El
2009-10-22 02:28
2009.12.20
Праздник культуры


13-1124363646
ilya39
2005-08-18 15:14
2009.12.20
CLR Debugger


2-1257069468
stas
2009-11-01 12:57
2009.12.20
http запрос передать рефер


2-1257182783
STD
2009-11-02 20:26
2009.12.20
Выполнить в фоне


1-1229164103
_Andrey_
2008-12-13 13:28
2009.12.20
USB Barcode scanner