Conversia rapidă a imaginilor color la alb-negru la c #

Poate că există mai multe metode pentru conversia unei imagini color în negru este alb, și poate chiar mai bine, dar pentru metoda de moment, prezentat mai jos, este cel mai rapid printre cunoscut pentru mine.






Conversia (pe calculatorul meu) a unei imagini de 2,3-2,5 Mb (2560x1920) durează în medie 0,3 secunde. În opinia mea, și pentru scopurile mele un rezultat bun.
Esența metodei nu funcționează cu imaginea însăși, dar în lucrul cu blocul de date, dacă este foarte simplu - înghețăm zona de date cu imaginea în memorie - schimbăm-o așa cum o avem nevoie și returnăm totul la normal.


Enumerarea matricei de octeți se realizează în trepte de 3, deoarece fiecare pixel este codificat cu 3 octeți de RG B.
În ciclu, componentele R G și B sunt însumate, se calculează media celor trei componente, după care, în loc de valorile lui R G și B, se plasează această valoare medie, astfel se stabilește tonul gri dorit.

Pentru funcționarea procedurii este necesară conectarea:
System.Drawing.Imaging;
System.Runtime.InteropServices;

Un exemplu de cum arată în acest caz:

Conversia rapidă a unei imagini color în alb-negru pe c #

Roman, în ciclu
pentru (int contra = 0; depășește matricea rgbValues.






Propun să scriu:
pentru (int contra = 0; Toate cele bune!

Conversia rapidă a unei imagini color în alb-negru pe c #

Strannenko. La mine, această bucată din cod este luată direct dintr-un exemplu de lucru. 100% de lucru.
Acolo, rgbValues.Length este numărul de elemente din matrice. Numărarea începe de la 0. După condiții (mai puțin greu). În mod logic, nu trebuie să mergem mai departe.
aici:

Conversia rapidă a imaginilor color la alb-negru la c #

Dar, în general, este puțin. Recent, folosind același algoritm (similar) împarte imagine mare pe o matrice mozaic de mici, și deci nu se înțelege de ce la o anumită lățime (egal cu 50) în elementul de imagine mozaic distorsionată elemente.

Erori nu vor apărea dacă rgbValues.Length este un multiplu de 3.
În caz contrar, va exista un zbor din matrice.

Conversia rapidă a imaginilor color la alb-negru la c #

Așa că am întrebat același format de pixeli PixelFormat.Format24bppRgb presupune (așa cum am înțeles) că este format din 3 octeți. Și cum să nu răsuciți numărul lor va fi un multiplu al celui de-al treilea. Sau eu am ceva ce nu așa înțeleg și depinde de formatul imaginii inițiale? Am încercat pe cele mai diferite - erorile nu se prăbușesc.

Conversia rapidă a imaginilor color la alb-negru la c #

Și mai mult codul dvs.:
este identică cu a mea
de rezultat.







Articole similare

Trimiteți-le prietenilor: