2009-07-09 2 views
0

Я использую C++ GDI, StretchDIBits для рисования изображений на DC.Изображение дрожит, когда StretchDIBits частично

Поскольку оригинальное изображение является большим и требуется высокое качество. Я использую режим HAFTONE, чтобы нарисовать целое изображение на DC (увеличить изображение), кажется, время комьюнити.

Поэтому я решаю частично нарисовать, используя StretchDIBits. Но есть серьезные проблемы с StretchDIBits.

Я могу только нарисовать прямоугольник в целых числах к области в целых числах (ширины и высоты, и верхней левой точки х, у, все целые числа)

::SetStretchBltMode(hdc, HALFTONE); 
    ::StretchDIBits(hdc, 
     realDrawRect.left, 
     realDrawRect.top, 
     realDrawRect.right - realDrawRect.left, 
     realDrawRect.bottom - realDrawRect.top, 
     left, 
     top, 
     width, 
     height, 
     pImageDIB, 
     pImageHead, 
     DIB_RGB_COLORS, SRCCOPY); 

, если, изображение 21 * 21. Теперь я рисую (5, 5, 7, 7) в DC, в (20, 20, 60, 60), в следующий раз, когда я буду рисовать (21, 20, 61, 60). нет соответствующего места на исходном изображении. Поэтому я могу привести только приближение к DC. Теперь проблема происходит, изображение дрожит!

Меня раздражает эта проблема. Как я могу избежать тряски?

ответ

0

Если дрожание происходит от округления целого числа, округлите его до ближайшего целого. См. this.

В противном случае я бы рекомендовал вам перейти на GDI +, с которым гораздо проще работать. С помощью GDI + вы можете рисовать растровое изображение с точностью с плавающей запятой. См. Документацию Graphics::DrawImage.

Я переключился с GDI на GDI + в пару проектов MFC Active-X, и это совсем не сложно.

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