Преобразуйте изображение в шкалу полутонов

Есть ли способ преобразовать изображение в полутоновый формат на 16 бит на пиксель, вместо того, чтобы установить каждый из r, g и b компонентов к яркости. У меня в настоящее время есть bmp из файла.

Bitmap c = new Bitmap("filename");

Я хочу Битовый массив d, который является полутоновой версией c. Я действительно вижу конструктора, который включает Систему. Рисование. Обработка изображений. PixelFormat, но я не понимаю, как использовать это. Я плохо знаком с Обработкой изображений и соответствующими библиотеками C#, но имею умеренный опыт с самим C#.

Любая справка, ссылка на источник онлайн, подсказку или предложение будут цениться.

Править: d является полутоновой версией c.

55
задан Dale K 6 December 2018 в 07:31
поделиться

1 ответ

«Я хочу Bitmap d, то есть в оттенках серого. Я действительно вижу конструктор, который включает System.Drawing. Imaging.PixelFormat, но я не понимаю, как это использовать ".

Вот как это сделать

Bitmap grayScaleBP = new 
         System.Drawing.Bitmap(2, 2, System.Drawing.Imaging.PixelFormat.Format16bppGrayScale);

РЕДАКТИРОВАТЬ: Чтобы преобразовать в оттенки серого

             Bitmap c = new Bitmap("fromFile");
             Bitmap d;
             int x, y;

             // Loop through the images pixels to reset color.
             for (x = 0; x < c.Width; x++)
             {
                 for (y = 0; y < c.Height; y++)
                 {
                     Color pixelColor = c.GetPixel(x, y);
                     Color newColor = Color.FromArgb(pixelColor.R, 0, 0);
                     c.SetPixel(x, y, newColor); // Now greyscale
                 }
             }
            d = c;   // d is grayscale version of c  

Более быстрая версия из переключите код , перейдите по ссылке для полного анализа:

public static Bitmap MakeGrayscale3(Bitmap original)
{
   //create a blank bitmap the same size as original
   Bitmap newBitmap = new Bitmap(original.Width, original.Height);

   //get a graphics object from the new image
   using(Graphics g = Graphics.FromImage(newBitmap)){

       //create the grayscale ColorMatrix
       ColorMatrix colorMatrix = new ColorMatrix(
          new float[][] 
          {
             new float[] {.3f, .3f, .3f, 0, 0},
             new float[] {.59f, .59f, .59f, 0, 0},
             new float[] {.11f, .11f, .11f, 0, 0},
             new float[] {0, 0, 0, 1, 0},
             new float[] {0, 0, 0, 0, 1}
          });

       //create some image attributes
       using(ImageAttributes attributes = new ImageAttributes()){

           //set the color matrix attribute
           attributes.SetColorMatrix(colorMatrix);

           //draw the original image on the new image
           //using the grayscale color matrix
           g.DrawImage(original, new Rectangle(0, 0, original.Width, original.Height),
                       0, 0, original.Width, original.Height, GraphicsUnit.Pixel, attributes);
       }
   }
   return newBitmap;
}
71
ответ дан 26 November 2019 в 17:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: