Preobrazovynie ч

Моля, помогнете как да конвертирате / Б изображения в BMP е масив от коефициенти на яркостта на стойностите на пикселите

В черно-бяло изображение на целия два фактора - черно и бяло.

GetBitmapBits или GetDiBits

Благодарение MBO пробвам

MBO Погледнах в помощ Делфи и такива процедури (или е функция) не е намерен, аз може да се наложи да инсталирате някакъв компонент, моля да ми кажете къде да намеря / изтегляне. по този начин се избягва delfi7 Interprajs .budu неумишлени правила за писане, ако записването на тези процедури

Благодаря tester_one, отговори ми, защото Не разбирах какво означава да "Coeff [Ь, й]: = цяло число (B.Canvas.Pixels [Ь, й]) и 0xFF", това е да се наситен. и това, което "и 0xFF"? Благодаря ви, благодарение на него, ако отговорът е тук, за да се започне на програмист или сапун.

> ilifant
Добре казано.
Коеф масив - това е набор от фактори, свързани с вас, неговият размер трябва да е равна на (или по-малко) размер на изображението, можете Ами той се създава.
Coeff [Ь, й] - съответния елемент на # XA0; масив.
B.Canvas.Pixels [Ь, й] - източник елемент картина (пиксел), неговата резултат - # XA0; TColor формат, тъй като е необходимо да се предизвика номера, който всъщност Integer () прави. Когато един графичен файл 256-цветен, тя ще има смисъл само първите 8 бита на число (B.Canvas.Pixels [I, J]) // всичко останало само в случай, подстригва по този начин "и 255" или "и $ FF" (0xFF - направих грешка).
Говорихте за яркостта, сега се говори за насищане - не е ясно.
Във всеки случай, както R-G-B (. 24-битов изображение) За получаване на яркостта на всяка точка:
Var X: Longint;
.
X: = цяло число (B.canvas.Pixels [Ь, й]) и $ FFFFFF;
Coeff [Ь, й]: = TRUNC ((X и $ 0000FF) * 0,3 + ((X и $ 00FF00) SHR 08) * 0,59 + ((X и $ FF0000) SHR 16) * 0,11);
.
в крайна сметка във вашата Soeff са ценности, които ще отговарят на яркостта на оригиналното изображение. Прочетете също проявяват битови операции и оператори, да разберем как те работят.
На добър час.

Spaibo tester_one. # XA0; за обяснение, в близко бъдеще ще се опитам, Шас Бота изпити

tester_one # XA0; (02/01/06 01:46) [9]
Във всеки случай, както R-G-B (. 24-битов изображение) За получаване на яркостта на всяка точка:
Var X: Longint;
.
X: = цяло число (B.canvas.Pixels [Ь, й]) и $ FFFFFF;
Coeff [Ь, й]: = TRUNC ((X и $ 0000FF) * 0,3 + ((X и $ 00FF00) SHR 08) * 0,59 + ((X и $ FF0000) SHR 16) * 0,11);
толкова пъргав на работата ще бъде:

процедура FillMassiv (Б: Tbitmap; Var Coeff: TCoeff);
конст пиксели = MaxInt DIV SizeOf (TRGBTriple);
тип
# XA0; PRGBArray = ^ TRGBArray;
# XA0; TRGBArray = масив [0..Pixels-1] на TRGBTriple;
Var х, у: цяло число; RowOut: PRGBArray;
започвам
# XA0; b.PixelFormat: = pf24bit;
# XA0 продължение на Y: = 0 до B.Height-1 се започне
# XA0; # XA0; RowOut: = B.ScanLine [у];
# XA0; за х: = 0 до B.Width-1 направи започва
# XA0; # XA0; # XA0; Coeff [Y, X]: = TRUNC (RowOut [х] .rgbtRed * 0.3 + RowOut [х] .rgbtGreen * 0,59 + RowOut [х] .rgbtBlue * 0.11);
# XA0; # XA0; # XA0; // може да се наложи да се превърне в R & B
# XA0; приключи;
# XA0; край;
приключи;

> antonn
Съгласен съм за скоростта.
Ако използвате пиксели [] - автоматично ще доведе TColor, всичко е в ред с реда на цветове във вашия случай (ScanLine) с първата структура RGBTRIPLE отива rgbtBlue, тогава rgbtGreen, тогава rgbtRed - т.е. че не е необходимо да се обърне повече нищо.

Памет: 0.74 MB
Време: 0,054 гр