Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1257373411
Drowsy
2009-11-05 01:23
2009.12.20
Триггеры в Interbase.


15-1256070609
Юрий
2009-10-21 00:30
2009.12.20
С днем рождения ! 21 октября 2009 среда


2-1256907604
HRustBB
2009-10-30 16:00
2009.12.20
Как сделать чтобы функция возвращала массив


2-1257399696
Drowsy
2009-11-05 08:41
2009.12.20
Запрос на создание процедуры в IBase.


2-1257243276
kyn66
2009-11-03 13:14
2009.12.20
Ошибка в коде, который раньше работал.





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