#c_sharp #winforms
Есть массив содержащий значения яркости пикселя размером 2 байта каждый. Как мне в С# нарисовать данное изображение, используя именно 2 байта, а не 1 (0-255)? Метод создания Bitmap'a для picturesBox'a: private void drawImage() { Bitmap bm = new Bitmap(1536, 4000, PixelFormat.Format16bppGrayScale); ushort[,] tempPixels = usingFile.getPixels(); for(int y = 0; y < tempPixels.GetUpperBound(0) + 1; y++) { for(int x = 0; x < tempPixels.GetUpperBound(1) + 1; x++) { //Задать яркость пикселя console.log("" + tempPixels[y, x]); } } pictureBox.Image = bm; }
Ответы
Ответ 1
Вся проблема лежит в плоскости того факта, что Bitmap инкапсулирует GDI+ bimap. GDI+ version 1.0 and 1.1 can read 16-bits-per-channel images, but such images are converted to an 8-bits-per-channel format for processing, displaying, and saving. взято отсюда Фактически, там внутри ты можешь задавать 16 битные значения. Но лишь внутри. Соответственно, если ты задаешь извне в Bitmap, то ты задаешь значение пикселей в 8 bit per channel format. Если использовать unsafe code, то ты можешь иметь доступ к значениям напрямую. То есть присвоить ushort вместо byte. Попробуй просмотреть вот этот код, он должен помочь теоретически: https://stackoverflow.com/questions/20778227/get-64bpp-image-color Детальнее точно не подскажу т.к. с этим не приходилось стыкатся на столько близко :) Ответ, правда, скорее про хранение изображения, выходит... Если задашь вот так вот вручную значения, то в таком случае оно все равно отрисует изображение в 8 бит на пиксель. Но автоматически, как и сказано в цитате выше.
Комментариев нет:
Отправить комментарий