モブ沢工房

プログラミングとかLinux関連(特にOSSのグラフィックツール関連)とかレトロゲームとか3Dプリンタやら日曜大工等、色々。

gambas3のqt4でImageに描画する方法

ChatGPTに聞いても嘘しか返ってこなかったので😡

最近、gambasってもしかして良いんじゃないか?と思ってます。速いし、型があるし、IDEの完成度もなかなかです。 しかし、マイナーなので資料に乏しいのが悩みどころ。

ChatGPTに聞くと一応返してくれるのですが特にPaint周りは嘘ばっかでした…😭

  Paint.Begin(img)

  Dim testcol As Integer

  testcol = Color.SetRGB(testcol, 255, 128, 0, 128) ' 半透明のオレンジ
  
  Paint.LineWidth = 2
  Paint.FillRect(0, 0, 256, 256, testcol) 
  
  Paint.Brush = Paint.Color(&H00FF0000) ' 完全に不透明な真っ赤
  Paint.MoveTo(10, 10)
  Paint.LineTo(246, 246)
  Paint.Stroke()
  
  Paint.End()
  • Paint.Begin(image) 〜 Paint.End()で囲みます
  • Sttrokeで線描画、 Fillで塗りつぶしは普通のqtと似てます
  • なんと、アルファ値の大小が通常と逆です。 一般的には8ビットARGBだと255で不透明ですが、0で不透明です。

このアルファ値の大小で悩まされましたですね。完全に不透明と思い込んでいたものが全く描画されなくて…(透明なんだから、当たり前だけど)

一瞬、int32なので、負の値周りのバグかと思ってしまいました。 実はこの問題、SDL2でも悩まされていたのです。 バグでなくて本当によかった。

なお、gambas3のIDEは日本語コメントも受付ますが、日本語文字列の描画が怪しいので英語でコメント書いてます。上のサンプルでのコメントは、はてな側で書き加えたものです。 一方、似たようなRAD的IDE的な、FreepascalのLazarusも捨てがたいのですが、こちらは日本語コメントを全くインライン編集出来ません(クリップボード経由のコピペは出来る)

一長一短ですというか、どうせ英語でコメント書くならもうLazarusでも良いかな…と思わなくもないです。ただワタクシPascalはかなり素人なので、その点はキツイですが…しかし、むしろGambasよりは資料多そうですね。

いずれゲームでも作ることで本格的に使い比べてみたい。