![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать монохромный растр? [D7, XP]
Б © (2009-01-17 21:33:00)Не в градациях серого, а монохромный, т.е. состоящий из 2 цветов - черного и белого.
antonn (2009-01-20 13:43:00) [1]еще один древнющий баян:
procedure PrepareBitmap2colorWithPorog(_B_out:Tbitmap; color1,color2:Tcolor; _persent_level:integer);
var x, y: Integer; RowOut: PRGBArray;
rc1, bc1, gc1,rc2, bc2, gc2:integer;
begin
_B_out.PixelFormat:=pf24bit; //óáðàòü, åñëè èçíà÷àëüíî ýòîò ôîðìàò
rc1:=GetRValue(color1); gc1:=GetGValue(color1); bc1:=GetBValue(color1);
rc2:=GetRValue(color2); gc2:=GetGValue(color2); bc2:=GetBValue(color2);
for y:=0 to _B_out.Height-1 do begin
RowOut:= _B_out.ScanLine[y];
for x:=0 to _B_out.Width-1 do begin
if ((RowOut[x].rgbtRed+RowOut[x].rgbtGreen+RowOut[x].rgbtBlue)/3)>(_persent_level/3) then begin
RowOut[x].rgbtRed:=rc1;
RowOut[x].rgbtGreen:=gc1;
RowOut[x].rgbtBlue:=bc1; end else begin
RowOut[x].rgbtRed:=rc2;
RowOut[x].rgbtGreen:=gc2;
RowOut[x].rgbtBlue:=bc2;
end;
end;
end
end;
вместо среднего арифметического запросто подставляется другая формула
antonn (2009-01-20 13:35:00) [2]
> KSergey © (20.01.09 11:10) [51]
>
> > antonn © (19.01.09 22:37) [47]
>
> А почему бы вам все ж на вопрос автора-то не ответить?
потому что вопрос решен.
и тему от начала можно почитать.
Б (2009-01-20 11:59:00) [3]> А почему бы вам все ж на вопрос автора-то не ответить?
Ответили уже давным давно. ;)
>Пользователю "Б" рекомендую не обращаться на форумы, за исключением >действительно сложных ситуаций.
Не... лучше средней сложности или легче, я же учусь. ;)
> но КАКАЯ от этого польза - советовал бы задуматься.
Польза? Хм, действительно какая? ;)
KSergey (2009-01-20 11:10:00) [4]> antonn © (19.01.09 22:37) [47]
А почему бы вам все ж на вопрос автора-то не ответить?
KilkennyCat (2009-01-20 09:35:00) [5]
> > Пользователю "Б" рекомендую обращаться на sources.ru или
> > винград
>
Пользователю "Б" рекомендую не обращаться на форумы, за исключением действительно сложных ситуаций. "Добреньких" на форумах хватает, отвечать будут, но КАКАЯ от этого польза - советовал бы задуматься.
Б (2009-01-20 07:10:00) [6]
> Пользователю "Б" рекомендую обращаться на sources.ru или
> винград если вопрос не сформулирован так, что половину ответа
> ты знаешь :)
Лады. ;)
P.S. Дали небольшой толчёк, вот и написал, как говорится "очередной велосипед", но на его сборке можно многому научиться. ;)
Германн (2009-01-20 00:34:00) [7]
> Пользователю "Б" рекомендую обращаться на sources.ru или
> винград
Присоединяюсь к рекомендации. На тех форумах уже достаточно много участников, которые данный этап уже благополучно прошли, но ещё не потеряли умение понимать подобные "бессвязные" вопросы. :)
Плюс там есть ещё и несколько "гуру", которые относятся к подобным новичкам и их вопросам достаточно "нежно".
P.S. "нежно" (с) не мой, а именно этих гуру. :)
P.P.S. И в чём-то они правы, черт побери.
antonn (2009-01-19 22:37:00) [8]
> KSergey © (19.01.09 15:18) [39]
>
> Вот что занятно: у вопрошающего нашлось куча времени и настроения
> брехаться, но не нашлось не понятно чего, чтобы попытаться
> растолковать ему нужный вопрос этим тупицам.
> А у защитников от чего-то не нашлось чего-то, чтобы на вопрос
> ответить (ну или хотя ыб пояснить для тупиц вокруг).
там чуть выше был дан код с наводкой, потом автор уже придумал сам способ и вероятно реализовал его (написав код самостоятельно либо взяв готовый - велосипедов сделано тьма).
В это время его атакуют вопросами наводящими, вероятно для того, чтобы выгородить себя ("Ах, мон сеньор, вы не так задали вопрос, господа просто вас не поняли! А иначе разве мы бы не помогли сударю? дадада") и заодно потыкать носом автора в то, как сильно он не умеет задавать вопросы (ну это чтобы совсем казалось что он виноват больше).
Баян. Много раз.
Если так хочется помочь - почему бы не уточнить? Уточнить так, как это обычно делается в разделе для начинающих на всех цивилизованных ресурсах. Прочитать предыдущую фразу два раза, чтоб понять то, о чем я.
Нет, ну конечно тут никто ничего не обязан (тоже баян, наверное еще больше чем первый), и можно ограничиться парой символов, "остальное в справке найдет", пожалста. Продолжайте в том же духе.
Короче даже лень вырезать цитаты и оспаривать, смысла нет.
Пользователю "Б" рекомендую обращаться на sources.ru или винград если вопрос не сформулирован так, что половину ответа ты знаешь :)
Sapersky (2009-01-19 17:49:00) [9]про порог ясно, а про аппроксимацию нет
Floyd-Steinberg dithering?
В качестве примера можно использовать компонент TGifImage, правда, Floyd-Steinberg там не вполне корректный, но всё же качество получается лучше, чем совсем без дизеринга.
Б (2009-01-19 17:26:00) [10]> А сложные приложения еще и аппроксимируют, а не тупо по порогу.
Я же не Фотошоп решил писать. ;) Все эти тости в дальнейшем учту, про порог ясно, а про аппроксимацию нет. Да ладно.
Anatoly Podgoretsky (2009-01-19 16:58:00) [11]> Б (19.01.2009 16:46:42) [42]
Не золотая, приложение вообще то должно иметь возможность менять порог. А сложные приложения еще и аппроксимируют, а не тупо по порогу.
Anatoly Podgoretsky (2009-01-19 16:56:00) [12]> Amoeba (19.01.2009 16:28:41) [41]
Чувствительность глаза не меняется, а вот люминофоры разные, поэтому существуют цветовые профили и разные формулы. Если выбрать неправильную формулу, то монохромное изображение будет отличаться от оригинала и будет отличаться при выводе на разные носители.
Б (2009-01-19 16:46:00) [13]2 Jeer
Понятно.
Хотел написать примерно такую формулировку: "Как сделать монохромный растр? Не в градациях серого, а такОЙ (ударение на ОЙ) монохромный, в котором всего 2 цвета - чёрный и белый". (Убрал слово "такой").
Если и так, то всё равно ясно.
> Я Вам пояснил [35], что градации серого, это частный случай монохрома.
Знаю. См. [9]
> 128 - это тоже частный случай и это тоже Вами не было оговорено.
Порог нейтральный, т.к. если, пусть будет 50, то границы в изображении все сотрутся (особенно маллозаметные контуры и штрихи), В итогое - чёрно-белое мессиво точек. Поэтому, условно говоря 128 - золотая середина, самый наилучший вариант и оговаривать его, думаю, не было необходимым.
> правильнее делать через предварительный переход к HLB(HLS) схемам.
Формулу выбрал по стандарту YCbCr.
А можно взять Вашу формулу, формулу стандарта ITU, CCIR 601-1 (VGA)... и др - есть из чего выбирать.
Amoeba (2009-01-19 16:28:00) [14]
> учитывающими особенности конкретного люминофора
скорее уж различную чувствительность глаза к разным участкам спектра
Jeer (2009-01-19 16:01:00) [15]
> Б (19.01.09 14:55) [37]
>
> > что задающие вопросы сами порой путаются в терминах
>
> Согласен, только не здесь. (Ух ты - правильно написал (на
> 3 раз)).
> Может некоторые считают, что чёрно-белый растр - эта битовый
> образ в градациях серого (Наверное по старым чёрно-белым
> фотографиям).
> Но я ясно пояснил какой эффект именно мне нужен См. [1].
>
> Для непонятливых См. [35] - тоже самое.
Претензия на раз очень проста и исходит из Вашего начального непонимания, того, что Вам надо - "Не в градациях серого, а монохромный"
Я Вам пояснил [35], что градации серого, это частный случай монохрома.
Черно-белое - частный случай монохрома-градаций серого при числе оттенков 2.
Еще Вы так и не поняли, что уровень деления на градации 128 - это тоже частный случай и это тоже Вами не было оговорено.
Далее, переход от цветовой схемы RGB к монохрому правильнее делать через предварительный переход к HLB(HLS) схемам.
Не обязательно в полном варианте - можно так:
Для Intensity:
result := (rgbtRed + rgbtGreen + rgbtBlue) div 3
либо с масштабными коэффициентами, учитывающими особенности конкретного люминофора, как и было сказано выше.
Для Lightness:
result := (MinIntValue( [rgbtRed, rgbtGreen, rgbtBlue] ) +
MaxIntValue( [rgbtRed, rgbtGreen, rgbtBlue] ) ) div 2
KSergey (2009-01-19 15:18:00) [16]Вот что занятно: у вопрошающего нашлось куча времени и настроения брехаться, но не нашлось не понятно чего, чтобы попытаться растолковать ему нужныйвопрос этим тупицам.
А у защитников от чего-то не нашлось чего-то, чтобы на вопрос ответить (ну или хотя ыб пояснить для тупиц вокруг).
Б (2009-01-19 14:56:00) [17]Удалено модератором
Б (2009-01-19 14:55:00) [18]> что задающие вопросы сами порой путаются в терминах
Согласен, только не здесь. (Ух ты - правильно написал (на 3 раз)).
Может некоторые считают, что чёрно-белый растр - эта битовый образ в градациях серого (Наверное по старым чёрно-белым фотографиям).
Но я ясно пояснил какой эффект именно мне нужен См. [1].
Для непонятливых См. [35] - тоже самое.
Вот готовая функция.
Запускайте и смотрите, смотрите, и ещё раз смотрите что требовалось.
Внятненько? ;)
Function Monochrome(const BMP: TBitmap; Invert: boolean = False): TBitmap;
Var Gray: TColor;
x, y: integer;
Line: PRGBTripleArray;
begin
Result:= TBitmap.Create;
Result.PixelFormat:= pf24bit;
Result.Assign(BMP);
For y:= 0 to Result.Height - 1 do
begin
Line:= Result.ScanLine[y];
For x:= 0 to Result.Width - 1 do
With Line[x] do
begin
Gray:= round(0.3 * rgbtRed + 0.59 * rgbtGreen + 0.11 * rgbtBlue);
If Invert then
If Gray > 127 then Gray:= 0
else Gray:= 255
else
If Gray > 127 then Gray:= 255
else Gray:= 0;
rgbtRed := Gray;
rgbtGreen:= Gray;
rgbtBlue := Gray;
end;
end;
End;
{RASkov} (2009-01-19 14:30:00) [19]> Что ещё нужно, чтобы понять?)
Дело в том, что задающие вопросы сами порой путаются в терминах, почему бы не уточнить?
Б (2009-01-19 13:36:00) [20]Я и не выёживаюсь, я отвечаю за заданные мне вопросы.
За Ахроматические спасибо, но суть вопроса не меняется.
В 1 посте я уже оговорил нужный мне вариант - (монохромный, чёрно-белый,
состоит из 2 цветов: чёрного и белого - Что ещё нужно, чтобы понять?)
и он является монохромным в любом случае. (Ахромат - вариация монохромного, как сказано выше).
Претензии?
В общем с вопросом мне всё ясно.