使用wxHaskell绘制缩放的位图

5
imageviewer example演示了如何在ScrolledWindow中显示图像。
如果我想在可用空间中显示图像,并根据需要缩放位图怎么办?
我的谷歌搜索没有找到相关信息。
编辑:我之前认为scrolledWindowSetScale可以帮助解决问题,但看起来并不能。

我现在有了问题的答案,我应该自己回复吗?我想知道在stackoverflow上这里的礼仪是什么。 - David V.
1
是的,如果你找到了答案,应该回复自己。 - thedayturns
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接