2010-08-13 9 views
7

Próbuję wyrenderować małą bitmapę w pamięci z .NET, która musi mieć 16-bitową skalę szarości. Format bitmapy jest ustawiony na PixelFormat.Format16bppGrayScale. Jednak Bitmap.SetPixel pobiera argument koloru. Kolor z kolei przyjmuje jeden bajt dla każdego z R, B i G (i opcjonalnie A).Ustawianie poszczególnych pikseli w formacie .NET Format16bppGrayScale

Jak określić 16-bitową wartość skali szarości zamiast wartości 8-bitowej podczas rysowania do mojej bitmapy?

Odpowiedz

8

Bez względu na format obrazu, SetPixel() jest brutalnie wolny. Nigdy nie używam go w praktyce.

Możesz ustawić piksele o wiele szybciej za pomocą metody LockBits, która pozwala szybko zarządzać danymi zarządzanymi do niezarządzanych bitmap bitowych.

Oto przykład jak to może wyglądać:

Bitmap bitmap = // ... 

// Lock the unmanaged bits for efficient writing. 
var data = bitmap.LockBits(
    new Rectangle(0, 0, bitmap.Width, bitmap.Height), 
    ImageLockMode.ReadWrite, 
    bitmap.PixelFormat); 

// Bulk copy pixel data from a byte array: 
Marshal.Copy(byteArray, 0, data.Scan0, byteArray.Length); 

// Or, for one pixel at a time: 
Marshal.WriteInt16(data.Scan0, offsetInBytes, shortValue); 

// When finished, unlock the unmanaged bits 
bitmap.UnlockBits(data); 

Należy zauważyć, że 16-bitowego w odcieniach szarości wydaje się być obsługiwany przez GDI +, co oznacza, że ​​.NET nie pomaga się z 16-bitowego zapisywania bitmapy w skali szarości w pliku lub strumień. Zobacz http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/10252c05-c4b6-49dc-b2a3-4c1396e2c3ab

+0

Dzięki. Początkowo używałem SetPixel, ponieważ piszę tylko mapę bitową 512x512 do systemu plików (tworząc mapę wysokości bryły utworzoną przez obrót rozkładu Gaussa wokół osi pionowej do wykorzystania w innym programie). Dobrze, że SetPixel jest zbyt wolny dla większości aplikacji. Ostatecznie zdecydowałem się na inny format mapy wysokości z powodu ograniczeń, które wskazałeś, ale twoja odpowiedź jest poprawna i kompletna, więc akceptujesz. –

Powiązane problemy