Форум: "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.035 c