C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Изменить цвет пикселей в Bitmap
Guest
Отправлено: 13.07.2005, 11:24


Не зарегистрирован







Есть TBitmap в котором находиться изображение (цветное),
в котором очень много черных точек(пикселей) типа clBlack

Нужно заменить все черные пикселы на белые, не трогая остальные.

Подскажите функции, кто работал с графикой:

1 как пройтись по массиву пикселей в TBitmap
2 определить цвет отдельного пиксела
3 изменить цвет отдельного пиксела
Guest
Отправлено: 13.07.2005, 11:36


Не зарегистрирован







for(int x=0; x<200; x++){
for(int y=0; y<100; y++){
if(bmp->Canvas->Pixels[x][y] == clBlack)
bmp->Canvas->Pixels[x][y] = clWhite;
}}
}
Sl@Sh
Отправлено: 13.07.2005, 11:44


Мастер участка

Группа: Участник
Сообщений: 383



Это медленный способ, подходит только для небольших изображений. Для более быстрой обработки используйте структуру RGBTRIPLE :

[CODE]RGBTRIPLE *Pix;
for(int x = 0; x < 200; x++)
{
Pix = (RGBTRIPLE*)bmp->ScanLine[x];
for(int y = 0; y<100; y++)
{
/*
R = Pix[y].rgbtRed;
B = Pix[y].rgbtBlue;
G = Pix[y].rgbtGreen;
*/
}
}[CODE]

Кстати я видел, что некоторые используют void* вместо RGBTRIPLE.
Сути решения это не меняет т.к. это всё-равно построчный метод
Guest
Отправлено: 13.07.2005, 12:04


Не зарегистрирован







Кстати, определить размерность bmp

CODE

TRect ClipRect = bmp->Canvas->ClipRect;
размеры соответственно  
   ClipRect.Width()
и ClipRect.Height()

Вернуться в Вопросы программирования в C++Builder