A gyors átalakulás egy színes kép fekete-fehér c #

Talán számos módszer létezik konvertáló színes kép fekete-fehér, és talán még jobb, de pillanatnyilag eljárás alább látható, a leggyorsabb körében ismert rám.
Conversion (Sajátgép) kép mérete 2,3-2,5 Mb (2560x1920) tart átlagosan 0,3 másodperc. Véleményem szerint, és a saját célra egy jó eredmény.
A módszer nem működik a kép és a munka az adatokat egységet, ha ez nagyon egyszerű - a fagyasztva adatterület egy képet szem előtt tartva - változtassa meg, mi kell, és vissza mindent a normális.


Iterálás byte tömböt 3 végezzük lépésekben, minden pixel van kódolva 3 bájt R G B.
A ciklus alkatrészek R G és B összeadódnak, az átlagos értéke a három komponens, majd ahelyett, hogy az R értékekre G és B helyezzük átlagos értéke ezáltal által adott a kívánt szürke tónusú.

Dolgozni kell csatlakoztatni eljárás:
System.Drawing.Imaging;
System.Runtime.InteropServices;

Egy példa arra, hogyan néz ki a valóságban:

A gyors átalakulás egy színes kép fekete-fehér c #

Újszerű a ciklusban
A (int számláló = 0; számláló van túlmutat a tömb rgbValues.
Azt javaslom, hogy írd be:
A (int számláló = 0; számláló Minden a legjobb!

A gyors átalakulás egy színes kép fekete-fehér c #

Strannenko. Van ez a darab a kódot venni egyenesen egy működő példa. 100% működik.
Uo rgbValues.Length - az a szám, a tömb elemeinek. A visszaszámlálás kezdődik 0. feltétel (mereven kevesebb). Logikája szerint nem lépheti túl.
Itt:

A gyors átalakulás egy színes kép fekete-fehér c #

De általában keveset. A jelenleg alkalmazott azonos (hasonló) algoritmus osztja a nagy kép egy mozaik sor kisebb, és így ez nem értendő, hogy miért csak bizonyos szélességében (egyenlő 50) a mozaik kép elem torz elemek.

A hibák nem lesz, ha rgbValues.Length többszöröse 3.
Ellenkező esetben, ha repül túl a tömb.

A gyors átalakulás egy színes kép fekete-fehér c #

Ezért megkértük az azonos képpont formátum PixelFormat.Format24bppRgb feltételezi (ha jól értem), hogy áll a 3 bájt. És ez nem azt mondja a szám osztható 3 m. Vagy én vagyok itt valami nem értem, és ez függ a forrás képformátum? Próbáltam a különböző - a hiba nem fagy stb.

A gyors átalakulás egy színes kép fekete-fehér c #

És mégis a kódot:
én azonos
Az eredmény.

Kapcsolódó cikkek