Preobrazovynie h

Vă rugăm să ajute cum să converti B / W imagini în bmp este o serie de coeficienți strălucirii valorilor pixelilor

În imagine alb-negru a întregului doi factori - alb-negru.

GetBitmapBits sau GetDiBits

Multumesc MBO încercați

MBO M-am uitat în ajutor Delphi și astfel de proceduri (sau este o funcție) nu este găsit, am putea avea nevoie pentru a instala unele componente, vă rugăm să-mi spui unde să găsească / descărcare. delfi7 Interprajs .budu evitându-se astfel normele de scriere neintenționate în cazul în care înregistrarea acestor proceduri

Mulțumesc tester_one, răspunde-mi că Nu am înțeles ce înseamnă să "Coef [i, j]: = întreg (B.Canvas.Pixels [i, j]) și 0xFF", aceasta este obtinerea saturate. și ce „și 0xFF“? Vă mulțumesc datorită lui în cazul în care răspunsul este aici pentru programator care începe sau săpun.

> ilifant
Ei bine spus.
Coef matrice - aceasta este o serie de factori relevanți pentru tine, dimensiunea sa trebuie să fie egală cu dimensiunea imaginii (sau mai puțin), este bine ea însăși creează.
Coef [i, j] - element corespunzător # XA0; matrice.
B.Canvas.Pixels [i, j] - element sursă de imagine (pixeli), rezultatul acesteia - # XA0, format TColor, deoarece este necesar să se determine numărul pe care de fapt Integer () nu. Atunci când un fișier de imagine cu 256 de culori, va fi semnificativ doar primii 8 biți ai Integer (B.Canvas.Pixels [i, j]) // orice altceva doar în cazul în care este prins, prin urmare, „și 255“, sau „și $ FF“ (0xFF - am făcut o greșeală).
Ați vorbit despre strălucirea, este acum vorbind despre saturația - este neclar.
În orice caz, ambele R-G-B (. 24-bit image) Pentru a obține luminozitatea fiecărui punct:
var X: Longint;
.
X: = Integer (B.canvas.Pixels [i, j]) și $ FFFFFF;
Coef [i, j]: = Trunc ((X și $ 0000FF) * 0,3 + ((X și $ 00FF00) SHR 08) * 0,59 + ((X și $ FF0000) SHR 16) * 0,11);
.
în cele din urmă în Soeff dvs. sunt valori care se vor întâlni luminozitatea imaginii originale. Citiți, de asemenea, prezintă operațiunile de biți și operatorii, să înțeleagă modul în care acestea funcționează.
Mult noroc.

Spaibo tester_one. # XA0; pentru o explicație, în viitorul apropiat, voi încerca, examene Shas Botha

tester_one # XA0; (02.01.06 01:46) [9]
În orice caz, ambele R-G-B (. 24-bit image) Pentru a obține luminozitatea fiecărui punct:
var X: Longint;
.
X: = Integer (B.canvas.Pixels [i, j]) și $ FFFFFF;
Coef [i, j]: = Trunc ((X și $ 0000FF) * 0,3 + ((X și $ 00FF00) SHR 08) * 0,59 + ((X și $ FF0000) SHR 16) * 0,11);
astfel încât agil cu privire la activitatea va fi:

Procedura FillMassiv (B: Tbitmap; var Coef: TCoeff);
const Pixelii = MaxInt div sizeof (TRGBTriple);
tip
# XA0; PRGBArray = ^ TRGBArray;
# XA0; TRGBArray = array [0..Pixels-1] de TRGBTriple;
var x, y: Integer; RowOut: PRGBArray;
începe
# XA0; b.PixelFormat: = pf24bit;
# XA0; pentru y: = 0 până la B.Height-1 nu înceapă
# XA0; # XA0; RowOut: = B.ScanLine [y];
# XA0; x: = 0 până la B.Width-1 do începe
# XA0; # XA0; # XA0; Coef [y, x]: = trunc (RowOut [x] .rgbtRed * 0.3 + RowOut [x] .rgbtGreen * 0,59 + RowOut [x] .rgbtBlue * 0,11);
# XA0; # XA0; # XA0; // poate fi necesar pentru a transforma R & B
# XA0; se încheie;
# XA0; end;
se încheie;

> antonn
Sunt de acord cu privire la viteza.
Dacă utilizați Pixeli [] - va conduce automat TColor, totul este în ordine cu ordinea de culori în cazul dumneavoastră (scanline) cu prima structură RGBTRIPLE merge rgbtBlue, apoi rgbtGreen, apoi rgbtRed - adică nu este necesar să se predea nimic.

Memorie: 0,74 MB
Timpul: 0,054 c