
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.82] |
![]() |
|
Страницы: (3) [1] 2 3 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Имеется цветной рисунок нужно из него сделать черно-белый.
![]() |
Сообщ.
#2
,
|
|
|
![]() ![]() 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; } } (с) Мяут ![]() |
Сообщ.
#3
,
|
|
|
Noer, этот вариант неправильный. Правильно - использовать компоненту Y(яркость) кодировки YUV.
Примеры - здесь: http://sources.ru/builder/faq/027.html или здесь: RGB to YUV и обратно |
Сообщ.
#4
,
|
|
|
trainer, Ну код же вроде пашет, а с ссылок этих я например не понял как сделать серую картинку...
|
Сообщ.
#5
,
|
|
|
Цитата 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 |
Сообщ.
#6
,
|
|
|
Вообщето в моем понимание серое это считаеться черно-белое или тебе надо чисто только черный и только белый ?
|
Сообщ.
#7
,
|
|
|
Цитата NoeR @ Он использует неправильный алгоритм определения яркости(оттенка серого). Ну код же вроде пашет |
Сообщ.
#8
,
|
|
|
Да, мне надо чисто только черный и только белый.
|
Сообщ.
#9
,
|
|
|
Черно-белый:
(Можно и через сканлайны) ![]() ![]() 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; } } Оттенки серого: ![]() ![]() 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: ![]() ![]() #define Gray(R, G, B) (R*.257 + G*.504+B*.098+16.) ЗЫ. NoeR, стравьте копирайты ![]() |
Сообщ.
#10
,
|
|
|
Цитата ЗЫ. NoeR, стравьте копирайты У Вас слишком высокая самооценка, я поставил копирайт! |
Сообщ.
#11
,
|
|
|
Сори. Просто тут совсем запарился. Извини - больще не повториться
![]() |
Сообщ.
#12
,
|
|
|
Цитата Мяут-Настоящий @ У фотошопа есть отличия притом я их вижу невооруженным глазомГде Gray определено как Y: #define Gray(R, G, B) (R*.257 + G*.504+B*.098+16.) Фотошоп сделал более контрастно |
Сообщ.
#13
,
|
|
|
Цитата gastroler @ Да, мне надо чисто только черный и только белый. А свойство TBitmap::Monochrome в true не пробовал выставить? |
Сообщ.
#14
,
|
|
|
Подскажите, пожалуйста, недоделанному программисту, если это код перевода цветного изображения в оттенки серого:
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; } } То, где окончание? То есть как на форму вывести результат - фото в оттенках серого? |
Сообщ.
#15
,
|
|
|
Цитата Klaribel @ Подскажите, пожалуйста, Тут подразумевается, что на форме есть уже компонент Image, в него уже загружена картинка, а этот код вставлен в обработчик кнопки. |