AlexSv |
Отправлено: 15.03.2004, 18:08 |
|
Не зарегистрирован
|
Подскажите, кто знает: как bmp-шную картинку сделать из цветной в черно-белую в C++B? |
|
gauldot |
Отправлено: 16.03.2004, 12:40 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 22
|
Помоему это можно сделать только написав свою функцию.
Принцип преобразования такой:
int Rn, Gn, Bn; // R,G,B исходного пиксела (цветного)
int Rk, Gk, Bk; // R,G,B пиксела-результата (оттенка серого)
Rk = Gk = Bk = (Rn + Gn + Bn)/3;
CODE |
// На форме должен присутствовать Image1 и кнопка Button1
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();
}
|
P.S. Если ты имел ввиду преобразование в ДВУХцветную картинку
(Чёрный и белый), то могу подкинуть пару методов. |
|
|