ぷらこのきろく

メモとかテストとか備忘録とか

walk ImageView

今日遊んだコードはこんな感じ。

package main

import (
	"github.com/lxn/walk"
	. "github.com/lxn/walk/declarative"
)
func main() {
	var iv *walk.ImageView
	img, _ := walk.NewImageFromFile("./tombo_big.bmp")
	imgsize := img.Size()

	MainWindow{
		Title: "hello",
		Size: Size{
			Width: imgsize.Width,
			Height: imgsize.Height,
		},
		Layout: VBox{
			MarginsZero: true,
		},
		Children: []Widget {
			ImageView {
				AssignTo: &iv,
				Image: img,
				MaxSize: Size{
					Width: imgsize.Width,
					Height: imgsize.Height,
				},
				MinSize: Size{
					Width: imgsize.Width,
					Height: imgsize.Height,
				},
			},
		},
	}.Run()
}

まず、画像ファイルを用意する。僕が用意したのはこれ
f:id:prizeout:20130922010732j:plain
tombo_big.bmpというファイルで用意した。
# 01:26追記、画像ファイルを投稿したら自動でjpegになるのね。
# 元はbmpだったということで…。

そのファイルを、walk.NewImageFromFile()関数で開くと、walk.Image型のデータができる。
そのデータ(ここではimgという変数でおいてある)を、前回のTextEditの代わりにImageViewを使い、その構造体のメンバImageに代入。

そのほかは前回のTextEditと変わらず、あっけないほどに画像表示ができた。
変えた部分は、VBoxの中のMarginsZero。ここをtrueにしておくと、余白がなくなってなんとなく綺麗にみえた。

気をつけるところがあるとすれば、walk.Image型はimage.Image型と違うっぽいこと。
golangの標準ライブラリの画像変換のところは直接は使えないっぽい。
ただ、walk/bitmap.goに、NewBitmapFromImage()という関数があって、それは、image.Image型をwalkに使えるように変換してくれるっぽい。

MaxSizeとMinSizeはあいかわらず、Minはきちんと作用するけどMaxは変になる。
バグじゃないかと疑ってるんだけど、それを直そうとすると僕はゆーざからでべろっぱにクラスチェンジしないといけなくなる。できるだけゆーざでいたいので放置ということで。。

というわけで次の目標、NewBitmapFromImage()を使ってみる。