th1nG |
Отправлено: 19.03.2004, 19:47 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 31
|
такая тема: есть Graphics::TBitmap, надо ево сделать чорно-белым.
т.е. не 2х цвенным а именно серым..
пробовал переделывать в TJpeg делать серым, и обратно в TBitmap но это не выход.. как бы мне его сразу..??
--буду благодарен за простой пример типа Button1::OnClick()
а на выходе готовый серенький
Отредактировано th1nG — 19/03/2004, 20:51
|
|
klen |
Отправлено: 20.03.2004, 12:37 |
|
Машинист паровоза
Группа: Участник
Сообщений: 239
|
Как сделать чОрно белый не знаю, а вот в черно-белый с легкостью.
Правда кажется на этом же форуме, дня два назад ктото уже спрашивал и кто то отвечал тоже самое, поиском пользоваться нада батенька.
Graphics::TBitmap* bm = Image1 -> Picture -> Bitmap ;
for ( int X = 0 ; X < bm -> Width ; X ++ )
{
for ( int Y = 0 ; Y < bm -> Width ; Y ++ )
{
TColor Pixel = bm -> Canvas -> Pixels[X][Y] ;
int MonoColor = ((Pixel & (0xff)) +
(Pixel>> 8 & (0xff)) +
(Pixel>> 16 & (0xff))) / 3 ;
Pixel = MonoColor + (MonoColor << 8) + (MonoColor << 16) ;
bm -> Canvas -> Pixels[X][Y] = Pixel ;
}
} |
|
th1nG |
Отправлено: 20.03.2004, 19:10 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 31
|
да, спасибо за намек.. я просто недавно искал но не нашол, решыл запостить.
CODE | void __fastcall TForm1::Button1Click(TObject *Sender)
{
int R, G, B;
int I;
Graphics::TBitmap *pBitmap = Image1->Picture->Bitmap;
int H = pBitmap->Height;
int W = pBitmap->Width;
for (int Y= 0; Y<H; Y++)
{
BYTE *lline = (BYTE *)pBitmap->ScanLine[Y];
for (int X= 0; X<W; X++)
{
R= (lline)[X*3+2];
G= (lline)[X*3+1];
B= (lline)[X*3];
I = (R+G+B)/3;
lline[X*3] =I;
lline[X*3+1] =I;
lline[X*3+2] =I;
}
}
Image1->Repaint();
}
|
Отредактировано th1nG — 20/03/2004, 20:13
|
|