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

Вниз

считывание данных из bmp файла   Найти похожие ветки 

 
simmoril   (2003-08-03 14:51) [0]

Задача состоит в считывании из bmp файла (картинка, вообще говоря, цветная) информации о яркости пикселей. Конкретнее, требуется получить прямоугольную матрицу чисел, каждое из которых будет определять только яркость соответствующего пиксела. Как будто, для чтения bmp файла надо пользоваться TCanvas.pixels[i,j].
Вопрос: как конкретизировать то, что мы хотим получить информацию именно о яркости пикселей?


 
esVer   (2003-08-03 16:55) [1]

Получить RGB каждого пиксела
Перевести RGB в HSV
V - яркость


 
simmoril   (2003-08-03 18:28) [2]

Большое Спасибо.


 
Fenik   (2003-08-03 18:51) [3]

function BLimit(A: Integer): Byte;
begin
if A < 0 then Result := 0
else if A > 255 then Result := 255
else Result := A;
end;

...

var
Bitmap: TBitmap;
Matrix: array of array of Byte;
x, y: Integer;
p: pByteArray;

begin
Bitmap := TBitmap.Create;
try
Bitmap.LoadFromFile("file.bmp");
Bitmap.PixelFormat := pf24Bit;
SetLength(Matrix, Bitmap.Height);
for y := 0 to Bitmap.Height - 1 do begin
p := Bitmap.PixelFormat[y];
SetLength(Matrix[y], Bitmap.Width);
for x := 0 to Bitmap.Width do
Matrix[y, x] := BLimit(Round((p[x*3] + p[x*3+1] + p[x*3+2])/3));
end;
finally
Bitmap.Free;
end;
end;

В Matrix то, что нужно.
За ошибки не пинать: писал без Delphi.


 
iXuSs   (2003-08-03 18:57) [4]

http://www.efg2.com/Lab/Graphics/Colors/HSV.htm


 
Fenik   (2003-08-03 19:00) [5]

Вот и первая ошибочка:
не
for x := 0 to Bitmap.Width do
а
for x := 0 to Bitmap.Width - 1 do


 
simmoril   (2003-08-05 18:43) [6]

Что происходит в строке

p := Bitmap.PixelFormat[y];

если выводится сообщение об ошибке «Аrray type required.»
Как мне это исправить?


 
Fenik   (2003-08-05 20:03) [7]

Ой блин!
Очепятка.

надо так:
p := Bitmap.ScanLine[y];


 
pasha676   (2003-08-06 10:33) [8]

p[x*3] + p[x*3+1] + p[x*3+2])/3

ЭЭЭ. Строго говоря это помоему не яркостная составляющая, а как бы средняя мощность по всем цветам. Впрочем может она и была нужна? А если нужна именно яркость - то надо перейти в другое измерение цвета (зашибись написал, но что то башка не думает о правильности терминов), где присутствует яркостная составляющая (см например предложение evSer-а, хотя в HSV я не вникал, но вроде что то около дерева). И помоему таких систем несколько. В jpg алгоритме что то подобное используется, он проще даже (тут опять память подводит).
Т.к. цвет не однозначен: 255 красного по яркости совсем не то что 255 зеленого. У каждого цвета есть еще свои весовые коэффиценты, которые определяют яркость.


 
Fenik   (2003-08-06 19:34) [9]

Вот верная формула:

Matrix[y, x] := BLimit(Round((p[x*3]*0.11 + p[x*3+1]*0.59 + p[x*3+2]*0.3)/3));


 
simmoril   (2003-08-06 19:37) [10]

pasha676, может это p[x*3] + p[x*3+1] + p[x*3+2])/3 и не яркостная составляющая, но в матрице те значения, которые мне нужно.
Не подскажешь, где можно прочитать про неоднозначность цвета, о которой ты говорил (желательно на русском языке)? Меня просто заинтересовала эта тема.


 
Fenik   (2003-08-06 19:44) [11]

> Fenik © (06.08.03 19:34)

Точнее так:
Matrix[y, x] := BLimit(Round((p[x*3]*0.11 + p[x*3+1]*0.59 + p[x*3+2]*0.3)));


 
simmoril   (2003-08-06 20:38) [12]

Большое спасибо.


 
pasha676_*   (2003-08-07 13:20) [13]

Да что то в этом роде. Я брал в каком-то англоязычном журнале.
Вот только Fenic у меня сомнения по факту коэффицентов в твоей формуле и особенно их порядка.
Я конечно могу ошибаться (данной тематикой лет 5-6 уже не занимался).
Fenic не мог бы ты привести формулу вида

xR+yG+zB

Где x,y,z - коэффиценты, ну а RGB - это соответственно цвета.


 
Fenik   (2003-08-08 11:23) [14]

Взял у знакомого книгу "Delpi 5 создание мультимедийных приложений". Так это оттуда:

"... Особенно хорошо воспринимается зелёный свет, красный свет воспринимается несколько хуже, а чувствительность глаза к синему свету ещё ниже. Многочисленные психологические тесты позволяют считать, что яркость вычисляется по формуле:"

L = 0.3*R + 0.59*G + 0.11*B



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

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

Наверх





Память: 0.47 MB
Время: 0.003 c
4-11747
npAKTuk
2003-10-07 09:03
2003.12.04
Реализация DragNDrop в API


6-11688
snake
2003-10-03 01:07
2003.12.04
Подсчет инет трафика


11-11601
chum
2003-03-21 16:55
2003.12.04
Как проверить конец файла в TStream


4-11731
KADAN
2003-10-07 21:29
2003.12.04
Shut down the computer (2k, XP)


4-11739
Pavels
2003-10-11 13:57
2003.12.04
проблема с создание окна





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