使用wxhaskell绘制缩放位图

时间:2011-09-01 13:23:19

标签: haskell bitmap wxwidgets scale wxhaskell

imageviewer example显示了如何在ScrolledWindow中显示图像。

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

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

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

1 个答案:

答案 0 :(得分:2)

有些人向我指出了wxCore中的函数,所以我找到了一个有效的解决方案。

在原始示例中执行绘图的功能是:

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

使用wxCore中的dcSetUserScale,我可以将其修改为按比例缩放:

(sw是scrolledWindow)

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