2010-01-08 2 views
1

Я использую следующий код для изменения размера растрового изображения с использованием GDI + в C. Я получаю серые значения для верхнего края даже для изображений, где эта область должна быть белой. Проблема исчезает, когда интерполяция является ближайшим соседом. Тем не менее, я пробовал бикубическую интерполяцию с ImageMagick, и это кажется прекрасным. Любые проблемы с ограничениями, о которых я должен знать? Является ли мой метод масштабирования неправильным? Благодаря!Fuzzy Top Edge с GDIPlus Resize

(входы: destSize: назначение Gdiplus :: Размер m_pBitmap: источник растровый)

Rect destRect(Point(0,0), destSize); 
Bitmap *pBitmap24BPP = new Bitmap(destSize.Width, destSize.Height, PixelFormat24bppRGB); 
pBitmap24BPP->SetResolution(m_pBitmap->GetHorizontalResolution(), m_pBitmap->GetVerticalResolution()); 
Graphics *pGraphics = Graphics::FromImage(pBitmap24BPP); 
pGraphics->SetInterpolationMode(InterpolationModeHighQualityBilinear); 
pGraphics->DrawImage(m_pBitmap, destRect, 0, 0, m_pBitmap->GetWidth(), m_pBitmap->GetHeight() , UnitPixel, NULL); 

//cleanup 

ответ

1

я уже видел подобные вещи. У меня не было времени исследовать его, но у меня есть ощущение, что это связано с тем, что изображение с разрешением GDI + ошибочно использует пиксельные значения «с верхнего края», что было бы абсолютно нулевым - делая его черным.

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

Смежные вопросы