Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

Монохромность   Найти похожие ветки 

 
ИМХО ©   (2004-03-03 05:56) [0]

Как сделать true color jpeg-картинку монохромной? Может есть какой-то безупречный алгоритм? Делал так: преобразовывал в tbitmap, ставил свойство Monochrome в True, но получалась такая ерунда, что смотреть было страшно.


 
MBo ©   (2004-03-03 06:28) [1]

http://delphimaster.net/view/8-1077973068/


 
MBo ©   (2004-03-03 06:29) [2]

P.S.
Это в градациях серого. Если нужно черно-белое, сдвигай не на 8 разрядов, а на 15 (еще на 128 разделить)


 
ИМХО ©   (2004-03-03 06:35) [3]

Спасибо, сейчас буду пробовать!!!


 
Mantic0re   (2004-03-03 18:04) [4]

Реально - у тебя получится не лучше.

Для получения качественной монохромной картинки надо использовать так называемый метод дизеринга ("dithering"). Существует несколько методов dithering - самый быстрый ordered он преобразует изображение "в сеточку" как в газетах, алгоритмы Floyd & Steindberg более медленны, но и дают лучшее качество изображения.

В зависимости от класса изображения (фотография, текстура..), качества и скорости работы подбирается требуемый алгоритм.


 
ИМХО ©   (2004-03-03 19:05) [5]

Если сдвигать на 15, то картинка получается полностью черная :(


 
ИМХО ©   (2004-03-03 19:11) [6]


> Mantic0re   (03.03.04 18:04) [4]
> В зависимости от класса изображения (фотография, текстура..),
> качества и скорости работы подбирается требуемый алгоритм.


Нет, не фотография, а текст на картинках (как бы снимок страницы документа).


 
dmk ©   (2004-03-03 21:12) [7]

Для совсем хорошего перевода требуется "растеризовать" изображение. Алгоритма не подскажу, но как делается смотри
PhotoShop -> Image -> Mode -> Bitmap -> Halftone Screening.
Вид растра подбирай по ситуации. Наиболее удачным считается
круглый растр. Но иногда линейный выглядит эффектней.
По крайней мере, PhotoShop перед печатью на монохромный принтер
преобразует RGB, CMYK и т.д. растры в монохромный.


 
ИМХО ©   (2004-03-04 04:52) [8]

Зачем мне Фотошоп? Мне нужно программно перевести картинку из true color в монохромную.


 
MBo ©   (2004-03-04 07:07) [9]

>ИМХО ©   (03.03.04 19:05) [5]
Я писал навскидку, так что проверь тщательно. После сдвига на 8 должна получаться яркость в диапазоне 0..255, еще на 7 - 0 или 1, причем эти значения назначать нужно уже в двуцветном растре.


 
ИМХО ©   (2004-03-04 07:37) [10]

Но в любом случе PixelFormat не меняется, верно? (если работать с TBitmap)
Если поменять PixelFormat на pf1bit получается вроде бы монохромность, но резкости уже нет (то есть символы на картинке становятся трудноразличыми).


 
ИМХО ©   (2004-03-04 07:37) [11]

трудноразличимыми


 
MBo ©   (2004-03-04 08:00) [12]

Первый пример - с использованием Canvas.Pixels, второй - библиотеки из статьи "Поставить точку"

procedure TForm1.Button1Click(Sender: TObject);
var
 b16m, bmono: TBitmap;
 x, y: Integer;
 r, g, b: byte;
 col: TColor;
begin
 b16m := TBitmap.Create;
 bmono := TBitmap.Create;
 b16m.LoadFromFile("pic.bmp");
 bmono.Width := b16m.Width;
 bmono.Height := b16m.Height;
 bmono.PixelFormat := pf1bit;
 for x := 0 to b16m.width - 1 do
   for y := 0 to b16m.Height - 1 do begin
     col := b16m.Canvas.pixels[x, y];
     r := GetRValue(col);
     g := GetGValue(col);
     b := GetBValue(col);
     bmono.Canvas.Pixels[x, y] := ((77 * R + 151 * G + 28 * B) shr 15) * $FFFFFF;
   end;
 Canvas.Draw(0, 0, b16m);
 Canvas.Draw(b16m.Width, 0, bmono);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 b16m, bmono: TBitmap;
 q, qm: TQuickPixels;
 x, y: Integer;
 r, g, b: byte;
 col: TColor;
begin
 b16m := TBitmap.Create;
 b16m.PixelFormat := pf24bit;
 bmono := TBitmap.Create;
 b16m.LoadFromFile("pic.bmp");
 b16m.PixelFormat := pf24bit;
 bmono.PixelFormat := pf1bit;
 bmono.Width := b16m.Width;
 bmono.Height := b16m.Height;
 bmono.PixelFormat := pf1bit;
 q := TQuickPixels.Create;
 q.Attach(b16m);
 qm := TQuickPixels.Create;
 qm.Attach(bmono);
 qm.ByPaletteIndex := True;
 for x := 0 to q.width - 1 do
   for y := 0 to q.Height - 1 do begin
     col := q[x, y];
     r := GetRValue(col);
     g := GetGValue(col);
     b := GetBValue(col);
     qm[x, y] := (77 * R + 151 * G + 28 * B) shr 15;
   end;
 Canvas.Draw(0, 0, b16m);
 Canvas.Draw(b16m.Width, 0, bmono);
end;



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

Форум: "Media";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.038 c
9-1074002243
ZAROLF
2004-01-13 16:57
2004.05.23
GamePlay


1-1084103434
Liona
2004-05-09 15:50
2004.05.23
Ребята мастера помогите с лаблраторной...


14-1083742581
X9
2004-05-05 11:36
2004.05.23
Клиент форума.


8-1078908668
КомофОнСамый
2004-03-10 11:51
2004.05.23
чем загрузить на TImage картинку TIF?


1-1083956667
LAnd
2004-05-07 23:04
2004.05.23
Подсветка текста компоненты SynHighLighters (SynEdit, SynMemo)





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