warning: unnecessary conversion (unconvert)
这来自以下一行:
offsetY += 60 + image.Image(*img.Bitmap).Bounds().Max.Y
我花了一段时间才明白如何将此接口指针转换为接口但我不认为这是正确的解决方案,因为gometalinter会发出警告。
我想获得img
的宽度。
img
是struct Image
,并且有一个指向真实image.Image
的Bitmap指针(图像stdlib)。如果我想在实际Bounds
上调用image.Image
,我需要将指向接口的指针转换为接口。
如何以更友善的方式完成这项工作?
我有以下代码:
import (
"image"
"image/color"
"image/draw"
)
type Image struct {
Src string
Title string
Width int
Height int
Index int
Bitmap *image.Image
}
type Images []Image
offsetY = 10
func ComposeImage(imgs Images) image.Image {
masterRGBAImg := image.NewRGBA(image.Rect(0, 0, 300, 300))
masterBounds := masterRGBAImg.Bounds()
for _, img := range imgs {
draw.Draw(masterRGBAImg, masterBounds,
*img.Bitmap, image.Point{X: -10, Y: -offsetY + 10}, draw.Src)
addLabel(masterRGBAImg, 10, offsetY-30, img.Title)
// HERE ======
offsetY += 60 + image.Image(*img.Bitmap).Bounds().Max.Y
// END ======
}
return masterRGBAImg
}
// Draw label on image.
func addLabel(img *image.RGBA, x int, y int, label string) {
col := color.RGBA{50, 50, 50, 255}
point := fixed.Point26_6{X: fixed.Int26_6(x * 64), Y: fixed.Int26_6(y * 64)}
d := &font.Drawer{
Dst: img,
Src: image.NewUniform(col),
Face: inconsolata.Bold8x16,
Dot: point,
}
d.DrawString(label)
}
答案 0 :(得分:1)
首先,位图字段是*image.Image
,所以它是相同的类型,当你可以取消引用它时,你不需要转换它。
(*img.Bitmap).Bounds()
但是,image.Image
是一个界面。指向接口的指针几乎总是编程错误。
将结构定义更改为
type Image struct {
Src string
Title string
Width int
Height int
Index int
Bitmap image.Image
}
然后您可以直接致电img.Bitmap.Bounds()