Нечеткий верхний край с GDIPlus Resize - PullRequest
1 голос
/ 08 января 2010

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

(входы: 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 Ответ

1 голос
/ 15 апреля 2010

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

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

...