![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Монохромность
ИМХО © (2004-03-03 05:56:00)Как сделать true color jpeg-картинку монохромной? Может есть какой-то безупречный алгоритм? Делал так: преобразовывал в tbitmap, ставил свойство Monochrome в True, но получалась такая ерунда, что смотреть было страшно.
MBo (2004-03-04 08:00:00) [1]Первый пример - с использованием 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;
ИМХО (2004-03-04 07:37:00) [2]Но в любом случе PixelFormat не меняется, верно? (если работать с TBitmap)
Если поменять PixelFormat на pf1bit получается вроде бы монохромность, но резкости уже нет (то есть символы на картинке становятся трудноразличыми).
ИМХО (2004-03-04 07:37:00) [3]трудно различимыми
MBo (2004-03-04 07:07:00) [4]>ИМХО © (03.03.04 19:05) [5]
Я писал навскидку, так что проверь тщательно. После сдвига на 8 должна получаться яркость в диапазоне 0..255, еще на 7 - 0 или 1, причем эти значения назначать нужно уже в двуцветном растре.
ИМХО (2004-03-04 04:52:00) [5]Зачем мне Фотошоп? Мне нужно программноперевести картинку из true color в монохромную.
dmk (2004-03-03 21:12:00) [6]Для совсем хорошего перевода требуется "растеризовать" изображение. Алгоритма не подскажу, но как делается смотри
PhotoShop -> Image -> Mode -> Bitmap -> Halftone Screening.
Вид растра подбирай по ситуации. Наиболее удачным считается
круглый растр. Но иногда линейный выглядит эффектней.
По крайней мере, PhotoShop перед печатью на монохромный принтер
преобразует RGB, CMYK и т.д. растры в монохромный.
ИМХО (2004-03-03 19:11:00) [7]
> Mantic0re (03.03.04 18:04) [4]
> В зависимости от класса изображения (фотография, текстура..),
> качества и скорости работы подбирается требуемый алгоритм.
Нет, не фотография, а текст на картинках (как бы снимок страницы документа).
ИМХО (2004-03-03 19:05:00) [8]Если сдвигать на 15, то картинка получается полностью черная :(
Mantic0re (2004-03-03 18:04:00) [9]Реально - у тебя получится не лучше.
Для получения качественной монохромной картинки надо использовать так называемый метод дизеринга ("dithering"). Существует несколько методов dithering - самый быстрый ordered он преобразует изображение "в сеточку" как в газетах, алгоритмы Floyd & Steindberg более медленны, но и дают лучшее качество изображения.
В зависимости от класса изображения (фотография, текстура..), качества и скорости работы подбирается требуемый алгоритм.
ИМХО (2004-03-03 06:35:00) [10]Спасибо, сейчас буду пробовать!!!
MBo (2004-03-03 06:29:00) [11]P.S.
Это в градациях серого. Если нужно черно-белое, сдвигай не на 8 разрядов, а на 15 (еще на 128 разделить)
MBo (2004-03-03 06:28:00) [12]http://www.delphimaster.ru/cgi-bin/forum.pl?id=1077973068&n=7