imageviewer example显示了如何在ScrolledWindow中显示图像。
如果我想在可用空间中显示图像,根据需要缩放位图怎么办?
我的google-fu在这一次失败了。
编辑:我以为我有scrolledWindowSetScale
的东西,但看起来它在这里没有帮助。
答案 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