Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Яркость пикселя (http://forum.oszone.net/showthread.php?t=49569)

Mavlyudov 21-05-2005 00:34 326093

Яркость пикселя
 
Как нарисовать в делфи гистограмму зависимости количества пикселов от яркости для любой картинки, которую можно поместить в Image1?
В фотошопе это находиться в Image>Histograme. Мне надо сделать что-то наподобие этого. Народ, поделитесь идеями

aESThete 21-05-2005 09:41 326129

выкопал лабу (кому-то из друзей делал) в свое время было написано для Turbo Pascal 7.0 for DOS
(в то время Delphi в институтах не учили ;))
Код:

program Histogram;

uses Crt;

const
  xmax = 100; ymax = 100; {размер картинки}
  colormax = 65535; {для 16-битной картинки}
  histomax = 640; {количество столбцов гистограммы, выводимой в режиме 640х480}

var
  image: array[1..xmax, 1..ymax] of word; {для 16-битной картинки}
  h: array[1..histomax] of integer;
  x, y: integer;
  a: real;
  k: real;

begin

  {здесь загрузка картинки в массив image}

  k := histomax / colormax; {коэффициент пересчета из цвета в гистограмму}

  for x := 1 to xmax do begin
    for y := 1 to ymax do begin
      a := image[x, y] * k; {приводим цвет к столбцам, здесь же можно превратить "цвет" в "яркость"}
      Inc(h[round(a)]); {прибавляем к соотв. столбцу}
    end;
  end;

  {здесь прорисовка результатов}

end.

предполагается что картинка - 16 бит градаций серого, т.е. это только общая идея, без выделения яркости и разбивки на цвета...
или вам нужен был именно алгоритм превращения номера цвета в яркость?..

hasherfrog 29-05-2005 23:45 328442

>> гистограмму зависимости количества пикселов от яркости для любой картинки
Сбивает с толку слово "зависимости". Скорее "распределения", да?

Яркость определяется компонентами R, G, B. Возможно, каждая компонента даёт не треть, а какое-то (пропорциональное) количество к яркости - тут я не очень большой знаток. Определяем всю шкалу как 0 - 255*3. Делим её, скажем, на 100 частей. В пределах одного процента получится 7.68 единицы. делаем массив из 100 ячеек, прогоняем для каждой точки картинки h[((R+G+B)*100)/768)]++; Ну а потом надо просто отстроить график.
Кстати, компонента A (прозрачность) также может влиять на яркость, наверное...


Время: 20:32.

Время: 20:32.
© OSzone.net 2001-