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 []

dcSetUserScalewxCoreを使用して、そのようにスケーリングするように変更できました。

( 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
于 2011-09-02T09:24:10.523 に答える