На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Страницы: (3) [1] 2 3  все  ( Перейти к последнему сообщению )  
> Как сделать черно-белое изображение
    Имеется цветной рисунок нужно из него сделать черно-белый.
    <_<
      ExpandedWrap disabled
                 int r = 0, g = 0, b = 0, color = 0;
                 for(int y = 0; y < Image->Height; y++){
                    ptr = (Byte*)Image->ScanLine[y];
                    for (int x = 0; x < Image->Width * 3; x+=3) {
                       r = ptr[x];   //Получаем
                       g = ptr[x+1]; //значения
                       b = ptr[x+2]; //каналов
                       color = (r + g + b) / 3; //Выссчитываем среднее значение
                       ptr[x]   = color;
                       ptr[x+1] = color;
                       ptr[x+2] = color;
                 }
                 }

      (с) Мяут ;)
        Noer, этот вариант неправильный. Правильно - использовать компоненту Y(яркость) кодировки YUV.
        Примеры - здесь: http://sources.ru/builder/faq/027.html или здесь: RGB to YUV и обратно
          trainer, Ну код же вроде пашет, а с ссылок этих я например не понял как сделать серую картинку...
            Цитата

            int r = 0, g = 0, b = 0, color = 0;
            for(int y = 0; y < Image->Height; y++){
            ptr = (Byte*)Image->ScanLine[y];
            for (int x = 0; x < Image->Width * 3; x+=3) {
            r = ptr[x]; //Получаем
            g = ptr[x+1]; //значения
            b = ptr[x+2]; //каналов
            color = (r + g + b) / 3; //Выссчитываем среднее значение
            ptr[x] = color;
            ptr[x+1] = color;
            ptr[x+2] = color;
            }
            }

            Мне кажется, что это преобразование не в черно-белое, а в серое.

            Цитата

            а с ссылок этих я например не понял как сделать серую картинку...

            Солидарен c NoeR
              Вообщето в моем понимание серое это считаеться черно-белое или тебе надо чисто только черный и только белый ?
                Цитата NoeR @
                Ну код же вроде пашет
                Он использует неправильный алгоритм определения яркости(оттенка серого).
                  Да, мне надо чисто только черный и только белый.
                    Черно-белый:

                    (Можно и через сканлайны)
                    ExpandedWrap disabled
                       int Height =  Image->Picture->Bitmap->Height;
                       int Width =  Image->Picture->Bitmap->Width;
                       byte Luminance = 128;
                       byte Color[3];
                       byte ColorMid;
                       for(int y = 0; y < Height; y++) {
                          for(int x = 0; x < Width; x++) {
                           Color[0] = GetRValue(Image->Picture->Bitmap->Canvas->Pixels[x][y]);
                           Color[1] = GetGValue(Image->Picture->Bitmap->Canvas->Pixels[x][y]);
                           Color[2] = GetBValue(Image->Picture->Bitmap->Canvas->Pixels[x][y]);
                           ColorMid = Gray(ptr[x], ptr[x+1], ptr[x+2]);
                           if(ColorMid < Luminance) Image->Picture->Bitmap->Canvas->Pixels[x][y] = 0x000000;
                           else Image->Picture->Bitmap->Canvas->Pixels[x][y] = 0xFFFFFF;
                          }
                       }


                    Оттенки серого:

                    ExpandedWrap disabled
                        int Height =  Image->Picture->Bitmap->Height;
                       int Width =  Image->Picture->Bitmap->Width*3;
                       byte ColorMid;
                       byte* ptr;
                       for(int y = 0; y < Height; y++) {
                          ptr = (byte*) Image->Picture->Bitmap->ScanLine[y];
                          for(int x = 0; x < Width; x+=3) {
                           ColorMid = Gray(ptr[x], ptr[x+1], ptr[x+2]);
                           ptr[x+2] = ColorMid;
                           ptr[x+1] = ColorMid;
                           ptr[x] = ColorMid;
                          }
                       }


                    Где Gray определено как Y:
                    ExpandedWrap disabled
                      #define Gray(R, G, B) (R*.257 + G*.504+B*.098+16.)


                    ЗЫ. NoeR, стравьте копирайты ;)
                      Цитата
                      ЗЫ. NoeR, стравьте копирайты

                      У Вас слишком высокая самооценка, я поставил копирайт!
                        Сори. Просто тут совсем запарился. Извини - больще не повториться ;)
                          Цитата Мяут-Настоящий @
                          Где Gray определено как Y:
                          #define Gray(R, G, B) (R*.257 + G*.504+B*.098+16.)
                          У фотошопа есть отличия притом я их вижу невооруженным глазом
                          Фотошоп сделал более контрастно
                            Цитата gastroler @
                            Да, мне надо чисто только черный и только белый.

                            А свойство TBitmap::Monochrome в true не пробовал выставить?
                              Подскажите, пожалуйста, недоделанному программисту, если это код перевода цветного изображения в оттенки серого:
                              int Height = Image->Picture->Bitmap->Height;
                              int Width = Image->Picture->Bitmap->Width*3;
                              byte ColorMid;
                              byte* ptr;
                              for(int y = 0; y < Height; y++) {
                              ptr = (byte*) Image->Picture->Bitmap->ScanLine[y];
                              for(int x = 0; x < Width; x+=3) {
                              ColorMid = Gray(ptr[x], ptr[x+1], ptr[x+2]);
                              ptr[x+2] = ColorMid;
                              ptr[x+1] = ColorMid;
                              ptr[x] = ColorMid;
                              }
                              }

                              То, где окончание? То есть как на форму вывести результат - фото в оттенках серого?
                                Цитата Klaribel @
                                Подскажите, пожалуйста,

                                Тут подразумевается, что на форме есть уже компонент Image, в него уже загружена картинка, а этот код вставлен в обработчик кнопки.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) [1] 2 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0655 ]   [ 16 queries used ]   [ Generated: 25.03.25, 02:28 GMT ]