使用wxhaskell绘制缩放位图

Dav*_* V. 5 wxwidgets haskell bitmap scale wxhaskell

图像浏览器实例说明如何显示在一个ScrolledWindow的图像.

如果我想在可用空间中显示图像,根据需要缩放位图,该怎么办?

我的google-fu在这一次失败了.

编辑:我以为我有一些东西scrolledWindowSetScale,但看起来它在这里没有帮助.

Dav*_* V. 2

有些人向我指出了 wxCore 中的函数,这样我就可以找到一个可行的解决方案。

在原始示例中进行绘图的函数是:

onPaint vbitmap dc viewArea
  = do mbBitmap <- get vbitmap value
       case mbBitmap of
         Nothing -> return () 
         Just bm -> drawBitmap dc bm pointZero False []
Run Code Online (Sandbox Code Playgroud)

使用dcSetUserScalewxCore,我可以修改它以按这种方式缩放:

( sw 是滚动窗口)

onPaint sw img dc viewArea = do
  mimg <- get img value
  case mimg of
    Nothing -> return ()
    Just bm -> do
      bsize <- get bm size
      vsize <- get sw size
      let scale = calcScale bsize vsize
      dcSetUserScale dc scale scale
      drawBitmap dc bm pointZero False []

calcScale :: Size -> Size -> Double
calcScale (Size bw bh) (Size vw vh) = min scalew scaleh
  where scalew = fromIntegral vw / fromIntegral bw
        scaleh = fromIntegral vh / fromIntegral bh
Run Code Online (Sandbox Code Playgroud)