Обработка изображений
От: GePo  
Дата: 19.03.06 15:19
Оценка:
Пусть я, например, хочу свести изображение к градациям серого.
Пишу такую фукнцию

void Filters::ToGray(System::Drawing::Bitmap* bmp)
{
    int w = bmp->Width;
    int h = bmp->Height;
    int x, y;

    BitmapData* bmpData;

    bmpData = bmp->LockBits (System::Drawing::Rectangle(0, 0, w, h),
                                           ImageLockMode::ReadWrite,
                                        PixelFormat::Format24bppRgb);

    char* p = (char*)bmpData->Scan0.ToPointer();
    char gray;
    int nOffset = bmpData->Stride - 3*w;

    for(y = 0; y < h; ++y, p += nOffset)
    {
        for(x = 0; x < w; ++x, p += 3)
        {
            char r = p[2];
            char g = p[1];
            char b = p[0];
            gray = char(0.3*r + 0.59*g + 0.11*b);

            p[0] = p[1] = p[2] = gray;
        }
    }
    bmp->UnlockBits(bmpData);
}


в неё передается Bitmap, который хранится в памяти. В обработчике формы OnPaint стоит
e->Graphics->DrawImage(m_Bitmap, 0, 0, m_Bitmap->Width, m_Bitmap->Height);


На выходе получаю картинку плохого качества.Т.е., это явно не gray-scale, там палитра серго явно меньше.
Отсюда вопрос, что я неправильно сделал?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.