5

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

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

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

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

4

1 回答 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 是滚动窗口)

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-09-02T09:24:10.523 回答