【问题标题】:Draw a scaled bitmap using wxhaskell使用 wxhaskell 绘制缩放位图
【发布时间】:2011-11-08 09:58:03
【问题描述】:

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

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

我的 google-fu 在这方面失败了。

编辑:我以为我对 scrolledWindowSetScale 有意见,但它似乎在这里没有帮助。

【问题讨论】:

  • 我的问题现在有了答案,我应该自己回答吗?我想知道stackoverflow上的礼仪是什么。
  • 是的,如果你找到了答案,你应该回复自己。

标签: haskell bitmap wxwidgets scale wxhaskell


【解决方案1】:

有人向我指出 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 是滚动窗口)

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

【讨论】:

    猜你喜欢
    • 2011-07-05
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多