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()
| |
|