imageviewerの例は、ScrolledWindow に画像を表示する方法を示しています。
必要に応じてビットマップをスケーリングして、使用可能なスペースに画像を表示したい場合はどうすればよいですか?
私のgoogle-fuはこれで失敗しました。
編集: で何かあると思ったscrolledWindowSetScale
のですが、ここでは役に立たないようです。
wxCore の関数を指摘してくれた人もいるので、うまくいく解決策を見つけることができました。
元の例で描画を行う関数は次のとおりです。
onPaint vbitmap dc viewArea
= do mbBitmap <- get vbitmap value
case mbBitmap of
Nothing -> return ()
Just bm -> drawBitmap dc bm pointZero False []
dcSetUserScale
wxCoreを使用して、そのようにスケーリングするように変更できました。
( 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