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

Вниз

Как сделать монохромный растр?   Найти похожие ветки 

 
Б   (2009-01-17 21:33) [0]

Не в градациях серого, а монохромный, т.е. состоящий из 2 цветов - черного и белого.


 
KilkennyCat ©   (2009-01-17 21:38) [1]

В смысле, как сделать растр? Из цветного?


 
Б   (2009-01-17 21:41) [2]

> В смысле, как сделать растр? Из цветного?

В смысле наложить эффект на цветной растр.


 
KilkennyCat ©   (2009-01-17 21:44) [3]

все равно пока непонятно.


 
Б   (2009-01-17 21:45) [4]

Обычный TBitmap в формате 24 бит. Чего же тут не понятного?


 
Игорь Шевченко ©   (2009-01-17 21:48) [5]

Учитесь правильно задавать вопросы, например, читая:
http://ln.com.ua/~openxs/articles/smart-questions-ru.html до полного и окончательного просветления.

В противном случае ваши темы будут закрываться без предупреждения.


 
KilkennyCat ©   (2009-01-17 21:54) [6]


> Б   (17.01.09 21:45) [4]

Ну тогда отвечу просто и универсально: нужно использовать clBlack и clWhite. Соответственно первый это 000000, второй - ffffff. исходя из этого можно творить любые эффекты.


 
Anatoly Podgoretsky ©   (2009-01-17 23:23) [7]

Я бы делал через шкалу серого, а потом через порог, например 128, который легко организовать путем маскирования по этому модулю.


 
palva ©   (2009-01-17 23:31) [8]


> а монохромный, т.е. состоящий из 2 цветов - черного и белого.

Монохромный не обязательно должен состоять из двух цветов.


 
Б   (2009-01-17 23:41) [9]

> Монохромный не обязательно должен состоять из двух цветов.

Лично я знаю только две его вариации:
1) В градациях серого (от 0 до 255).
2) Чисто чёрный и белые цвета.

> Я бы делал через шкалу серого

Как её определить, эту самую шкалу серого?


 
palva ©   (2009-01-18 00:01) [10]


> Как её определить, эту самую шкалу серого?

Сам же написал выше - от 0 до 255, т. е.:
type TMonoColor = (0..255);
Ну а растр будет массивом:
type TRastr = array [1..600] of array [1..800] of TMonoColor;


 
{RASkov} ©   (2009-01-18 00:14) [11]

> [4] Б   (17.01.09 21:45)

TBitmap.Monochrome = True ?


 
antonn ©   (2009-01-18 00:57) [12]

если грубо:
procedure PrepareBitmapLevel(_B_out:Tbitmap; Lr,Lg,Lb:byte; _b:boolean);
const Pixels = MaxInt div SizeOf(TRGBTriple);
type PRGBArray = ^TRGBArray;
    TRGBArray = array[0..Pixels-1] of TRGBTriple;
var x, y: Integer; RowOut: PRGBArray;
begin
 _B_out.PixelFormat:=pf24bit;
 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>Lr)and(RowOut[x].rgbtGreen>Lg)and(RowOut[x].rgbtBlue>Lb)and(_ b) then begin
         RowOut[x].rgbtRed:=255;
         RowOut[x].rgbtGreen:=255;
         RowOut[x].rgbtBlue:=255;
      end else
        if (RowOut[x].rgbtRed<Lr)and(RowOut[x].rgbtGreen<Lg)and(RowOut[x].rgbtBlue<Lb)and not(_b) then begin
         RowOut[x].rgbtRed:=255;
         RowOut[x].rgbtGreen:=255;
         RowOut[x].rgbtBlue:=255;
      end;
   end;
 end
end;

для каждого канала задается уровень.


 
Германн ©   (2009-01-18 01:54) [13]

Ещё один пример наличия вопроса при отсутствии задачи!
А без объяснения задачи, невозможно понять что нужно автору.

> antonn ©   (18.01.09 00:57) [12]
> если грубо

А вот грубить не надо!
:)


 
antonn ©   (2009-01-18 02:07) [14]

Не надо лукавить, чтобы не понять, что автору нужно монохромную картинку из "обычной" надо либо быть тупым, либо слишком двоичным и с могучим самомнением.
Кто не видел монохромных - откройте mspaint и посмотрите.


 
Германн ©   (2009-01-18 02:28) [15]


> antonn ©   (18.01.09 02:07) [14]
>
> Не надо лукавить, чтобы не понять, что автору нужно монохромную
> картинку из "обычной" надо либо быть тупым, либо слишком
> двоичным и с могучим самомнением.

А как? По каким алгоритмам преобразовать "обычную" картинку в монохромную? Ты сей алгоритм знаешь? И сей алгоритм "независим" от реальной задачи, в которой требуется данное преобразование?
P.S. Тут ты, Антон, меня разочаровал. :)


 
palva ©   (2009-01-18 11:06) [16]


> А как? По каким алгоритмам преобразовать

Ну взять, к примеру, цветовую схему YCbCr и формулу для вычисления яркости Y.
Y = 0.299R + 0.587G + 0.114B


 
Б   (2009-01-18 11:52) [17]

> antonn ©   (18.01.09 02:07) [14]
Полностью поддерживаю.

> Ещё один пример наличия вопроса при отсутствии задачи!

Какая тут должна быть задача, кроме как преобразовать растр в монохром? ;)

> А как? По каким алгоритмам преобразовать. Ты сей алгоритм знаешь?

Имеется несколько различных стандартов градаций серого.
Короче, готовых формул завались!

> TBitmap.Monochrome = True ?

Растр с ног до головы чёрный при любом формате.
--------------------------------------------------------------------------

В итоге решил преобразовать растр сперва в градации серого, а потом воспользоваться порогом в 128.


 
KilkennyCat ©   (2009-01-18 12:07) [18]


> Какая тут должна быть задача, кроме как преобразовать растр
> в монохром? ;)


Перечитай внимательно свой вопрос. Самый первый. В самом верху. Найди там задачу о преобразовании и ткни меня носом.


 
Б   (2009-01-18 12:37) [19]

Сделать = преобразовать.


 
Anatoly Podgoretsky ©   (2009-01-18 12:45) [20]


> В итоге решил преобразовать растр сперва в градации серого,
>  а потом воспользоваться порогом в 128.

Тут единственная сложность выбрать правильную формулу преобразования, формаула приведеная palva это для отображения на телевизоре или мониторе.


 
Б   (2009-01-18 13:11) [21]

> Тут единственная сложность выбрать правильную формулу преобразования

Я выбрал эту формулу из 5.


 
KilkennyCat ©   (2009-01-18 14:26) [22]


> Б   (18.01.09 12:37) [19]
>
> Сделать = преобразовать.


Да ну?!

Я создал битмап, половину залил белым, половину черным. Удовлетворяет твоему условию?
Напоминаю условие:сделать монохромный растр


 
Б   (2009-01-18 15:00) [23]

> Я создал битмап, половину залил белым, половину черным. Удовлетворяет > твоему условию?

См. слова Антона [14] - всё правильно сказал.


 
KilkennyCat ©   (2009-01-18 16:08) [24]


> Б   (18.01.09 15:00) [23]


Ни я и никто не обязан догадываться, что ты имел ввиду.
См. Игорь Шевченко ©   (17.01.09 21:48) [5]


 
sniknik ©   (2009-01-18 16:20) [25]

> См. слова Антона [14] - всё правильно сказал.
вот только не надо "лукавить" обвиняя в лукавстве остальных...
раскрыл бы твой "Антона" смысл твоего вопроса в первом посте, а не в 14м после уточняющих вопросов/ответов, вот это да, имел бы право, а так... сплошное лукавство.

давай проверку? задаешь вопрос в своем "фирменном" стиле и подписываешь, что исключительные права на ответ у "Антона", чтоб другие случайно не встряли, и пусть он ответит, с первого раза, без доп. вопросов и лукавства...


 
palva ©   (2009-01-18 17:11) [26]

Тупость компьютеров поражает. Они делают то, что написал программист, а не то, что он при этом думал. Хуже того, программисты от долгого общения с компьютерами становятся такими же тупыми. Неудивительно, что остроумным людям никак не удается найти с компьютерами общий язык. Им не помогает даже помощь компьютероподобных тупиц на тупых форумах.


 
Б   (2009-01-18 17:16) [27]

> Ни я и никто не обязан догадываться, что ты имел ввиду.

Твоё право, можешь и не "догадываться".

Фраза "МОНОХРОМНЫЙ РАСТР" уже говорит сама за себя.
Что ты считаешь под понятием монохромного растра? Вот это?


>
> Я создал битмап, половину залил белым, половину черным.
> Удовлетворяет твоему условию?
> Напоминаю условие:сделать монохромный растр


Понятное дело какой именно растр я имею ввиду. Обычным дельфийский
TBitmap или думаете, что это HBitmap, DDB?, цвет - любой (Фильтру без разницы, какой растр он обрабатывает цветной или нет, да и кто, скажите мне на милость, будет чёрно-белый пропускать через фильтр монохромность?).

> вот только не надо "лукавить" обвиняя в лукавстве остальных...

И где я кого то обвиняю?

> а не в 14м после уточняющих вопросов/ответов,

Заметь: был ОДИН вопрос - ОДИН ответ.

> вот это да, имел бы право,

Представим что так, но KilkennyCat и на 22 посте не понял, что требуется.

> раскрыл бы твой "Антона"

Во-первых: он не мой.
Во-вторых: какой смысл писать то, что уже сказали до?
В-третьих: читать склонённые имена удобнее.

> в своем "фирменном"

Чем тебе он не угодил? Какие есть замечания??? Выкладывай, не стесняйся.


 
sniknik ©   (2009-01-18 17:40) [28]

> Представим что так, но KilkennyCat и на 22 посте не понял, что требуется.
да брось, претензии у него именно к первому посту ->
> Перечитай внимательно свой вопрос. Самый первый. В самом верху. Найди там задачу о преобразовании и ткни меня носом.
к тому, что для тебя "Сделать = преобразовать."
а то, что он не понял аж до 22го это ты выдумал. представил желаемое за действительное, как ранее подуманное за сказаное.  
к стати претензии обоснованные т.к. это именно он тебя "раскручивал" на доп инфу по которой annton так лихо все понял...

> Чем тебе он не угодил? Какие есть замечания??? Выкладывай, не стесняйся.
для ответа будем цитировать, тебя же  
> Во-вторых: какой смысл писать то, что уже сказали до?
и И.Ш.
> Учитесь правильно задавать вопросы, например, читая:
> http://ln.com.ua/~openxs/articles/smart-questions-ru.html до полного и окончательного просветления.

> В противном случае ваши темы будут закрываться без предупреждения.

это о повторениях.


 
Б   (2009-01-18 18:20) [29]

> это именно он тебя "раскручивал" на доп инфу

Если ему всё понятно, то какого лешего он ещё спрашивает? (Да и понимать и нечего с 1 поста всё понятно, монохромный растр будто не видели).


 
sniknik ©   (2009-01-18 18:53) [30]

> Если ему всё понятно, то какого лешего он ещё спрашивает?
у него спроси.
но если бы я задавал наводящие вопросы, то хотел бы услышать четкую постановку от автора, убедится что ОН САМ ПОНЯЛ, что ему нужно.

> (Да и понимать и нечего с 1 поста всё понятно, монохромный растр будто не видели).
серьезно нечего? а почему ты тогда согласился на градацию серого вместо монохромного? раз с 1го поста все понятно, а градацию упомянули позже.
чувствуется до сих пор непонимание, и идет оно от тебя.


 
Кое кому   (2009-01-18 19:23) [31]


> то какого лешего он ещё спрашивает?

Когда ты прочитаешь хотя бы Фэнь Юаня, когда мсдн будет у тебя домашней страницей, когда начнешь насиловать видео чуть ли не помимо драйверов, тогда ты поймешь, что я в принципе не могу опуститься до твоего примитива работы с графикой, подразумевающего столь однозначные варианты, как тебе они кажутся.
И судя по всему, ссылку, данную тебе Шевченко и упомянутую еще дважды, ты так и не удосужился прочитать.


 
KilkennyCat ©   (2009-01-18 19:25) [32]

Кое кому = KilkennyCat. Зашел с чужой машины.


 
Б   (2009-01-19 11:52) [33]

> а почему ты тогда согласился на градацию серого вместо монохромного?

Я и не соглашался.
Мне это не надо, т.к. это уже сделал до того как задал этот вопрос.

В итоге, что получается с решением данного вопроса?
Правильно, СНАЧАЛА ПЕРЕВОДИМ РАСТР В ГРАДАЦИИ СЕРОГО (градация сама всплыла, потому что всё делается именно через неё), а уже потом, при помощи порога, в чёрно-белое. Понятно?
Сделать таким путём сказал Anatoly Podgoretsky [7].
Как видите, про градации я и не заикался и нехрен так говорить.

> ты прочитаешь хотя бы Фэнь Юаня

Обязательно прочитаю. Как время позволит.

> что я в принципе не могу опуститься до твоего примитива работы с графикой

Ты что слепой не видеть - вопрос в ветке "Начинающим" находится?
Не понимать, что я - НОВИЧОК? Только учусь и считаю не плохо.
(Работаю пол-года). Мало по-малу научусь.
Работа через ScanLine - убогий примитив, которым пользуюсь не только я, да?
http://delphimaster.net/view/8-1231354672/
Скажи там, что ScanLine примитив.
Или про простенький фильтр говоришь, подразумевая под примивом?
Или я мало чего представляю о графике? Типа прочитай Юаня, Брусенцова, Григорьева и др., а потом приходи в ветвь "Начинающим".

> однозначные варианты

Тогда, назови не однозначные вариаты и методы, кое кто, причитавший Юаня.


 
Jeer ©   (2009-01-19 12:43) [34]


> Как сделать монохромный растр? [D7, XP]
>
> Б   (17.01.09 21:33)
>
> Не в градациях серого, а монохромный, т.е. состоящий из
> 2 цветов - черного и белого.


Вместо ого, чтобы тут выеживаться, стоило обратиться к "букварю" и выяснить следующее:
Изображения бывают цветные, монохромные, ахроматические.
В монохромных используется один базовый цвет и заданное число градаций.
Ахроматическое изображение - частный случай монохромного в ч/б варианте - т.н. шкала серого. Предельный переход к черно-белому варианту совершается при числе градаций 2.


 
Б   (2009-01-19 13:36) [35]

Я и не выёживаюсь, я отвечаю за заданные мне вопросы.

За Ахроматические спасибо, но суть вопроса не меняется.
В 1 посте я уже оговорил нужный мне вариант - (монохромный, чёрно-белый,
состоит из 2 цветов: чёрного и белого - Что ещё нужно, чтобы понять?)
и он является монохромным в любом случае. (Ахромат - вариация монохромного, как сказано выше).
Претензии?

В общем с вопросом мне всё ясно.


 
{RASkov} ©   (2009-01-19 14:30) [36]

> Что ещё нужно, чтобы понять?)

Дело в том, что задающие вопросы сами порой путаются в терминах, почему бы не уточнить?


 
Б   (2009-01-19 14:55) [37]

> что задающие вопросы сами порой путаются в терминах

Согласен, только не здесь. (Ух ты - правильно написал (на 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;


 
Б   (2009-01-19 14:56) [38]

Удалено модератором


 
KSergey ©   (2009-01-19 15:18) [39]

Вот что занятно: у вопрошающего нашлось куча времени и настроения брехаться, но не нашлось не понятно чего, чтобы попытаться растолковать ему нужный вопрос этим тупицам.
А у защитников от чего-то не нашлось чего-то, чтобы на вопрос ответить (ну или хотя ыб пояснить для тупиц вокруг).


 
Jeer ©   (2009-01-19 16:01) [40]


> Б   (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



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

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

Наверх





Память: 0.61 MB
Время: 0.006 c
15-1230831771
Riply
2009-01-01 20:42
2009.03.01
Борьба с торможением компьютера.


8-1190721566
Jimmy
2007-09-25 15:59
2009.03.01
Ссылка на учебник по векторной графике


2-1232095406
vegarulez
2009-01-16 11:43
2009.03.01
работа в горячей клавишей...


2-1232302860
try...except
2009-01-18 21:21
2009.03.01
Обработка ошибки подключения к сети?


15-1230522009
Slider007
2008-12-29 06:40
2009.03.01
С днем рождения ! 28 декабря 2008 воскресенье





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