собс-но сабж. как сделать ресайзинг изображения быстрее чем StretchBlt? сейчас делаю так: IntPtr surfaceDC = e.Graphics.GetHdc(); IntPtr memDC = CreateCompatibleDC(surfaceDC); IntPtr hBmp = bm.GetHbitmap(); При достаточно большом уменьшении stretchblt выполняется недостаточно быстро. IntPtr hPrevBmp = SelectObject(memDC, hBmp); StretchBlt(surfaceDC, PaintRect.X, PaintRect.Y, PaintRect.Width, PaintRect.Height, memDC, 0, 0, BitmapRect.Width, BitmapRect.Height, (int)TernaryRasterOperations.SRCCOPY); SelectObject(memDC, hPrevBmp); DeleteObject(hBmp); DeleteDC(memDC); e.Graphics.ReleaseHdc(surfaceDC);
скорость можно повысить в обмен на некоторое ухудшение качества, установив StretchMode в COLORONCOLOR
Ресайзинг вообще не очень быстрая операция. Ускорить можно только если сам будешь преобразовывать изображение. Какие размеры картинки? Какая скорость нужна?
размеры картинки ~10000*10000 пикселей показывается ессно только то что влазит на экран а скорость - надо чтобы летало Kola ткните, пож, носом в ссылку какую-нить по этому поводу
slow извините, ссылку не могу дать тк просто не знаю такой я это делал сам, читая только MSDN. К сожалению сорсов сейчас под рукой нет. Вкратце последовательность такая: Вызываем GetDIBits, делаем Stretch (я функцию их использовал Intel-овской IPP), из полученных пикселей создаем bitmap, селектим ее в memDC, потом BitBlt её в экран
slow GDI не позволяет вообще работать с такими большими картинками. Для этого существуют библиотеки сторонних производителей. Я бы для таких мега-картинок задействовал JPEG2000. Правда, нормальных и бесплатных либ для JPEG2000 пока ещё нет.