2025-05-05 15:20:22 +08:00

imagedd

golang绘图库

功能概述

imagedd是一个Go语言绘图库提供了精灵图(Sprite)管理、2D图形绘制、图像渲染等功能。

主要组件

精灵图 (Sprite)

精灵图是基本的渲染单元,包含图像数据和位置信息。

type Sprite struct {
    Name     string       // 精灵名称
    Position image.Point  // 精灵位置
    Image    image.Image  // 精灵图像
    Index    int          // 用于排序的索引
}

精灵图操作

// 移动精灵
sprite.Move(x, y int)

// 旋转精灵
sprite.Rotate(angle float64)

// 投影变换
sprite.Project(projectMatrix *ProjectMatrix)

// 在精灵上绘制线条
sprite.DrawLine(line *Line)

精灵板 (NamedSpriteBoard)

精灵板用于管理多个精灵,提供高效的添加、查找、排序功能。

// 创建新的精灵板
board := sprite.NewNamedSpriteBoard()

// 添加精灵
board.AddSprite(sprite)

// 按名称查找精灵
foundSprite := board.GetSpriteByName("精灵名称")

// 获取特定索引的所有精灵
sprites := board.GetSpritesByIndex(1)

// 按名称删除精灵
board.RemoveSpriteByName("精灵名称")

// 更新精灵的索引
board.UpdateSpriteIndex("精灵名称", 2)

// 更新精灵的名称
board.UpdateSpriteName("旧名称", "新名称")

// 获取所有精灵按Index主排序Name次排序
allSprites := board.GetAllSprites()

// 渲染精灵板为图像
img := board.RenderToImage()

// 保存为PNG文件
board.SaveToPng("output.png")

2D图形组件

线条 (Line)

// 创建线条
line := &sprite.Line{
    Start: image.Point{X: 10, Y: 10},
    End:   image.Point{X: 100, Y: 100},
    Width: 2,
    Color: color.RGBA{255, 0, 0, 255}, // 红色
}

// 添加到精灵
line.AddToSprite(sprite)

圆形 (Circle)

// 创建圆形
circle := &sprite.Circle{
    Center: image.Point{X: 50, Y: 50},
    Radius: 30,
    Color:  color.RGBA{0, 0, 255, 255}, // 蓝色
}

// 添加到精灵
circle.AddToSprite(sprite)

投影矩阵 (ProjectMatrix)

// 创建投影矩阵
matrix := &sprite.ProjectMatrix{
    Matrix: [2][2]float64{
        {1.0, 0.5},
        {0.0, 1.0},
    },
}

// 投影点
newPoint := matrix.ProjectPoint(image.Point{X: 10, Y: 20})

// 投影线条
newLine := matrix.ProjectLine(line)

渲染特性

  • 支持精灵的层级渲染通过Index控制
  • 支持精灵的名称索引O(1)时间复杂度查找)
  • 支持负坐标位置的精灵
  • 自动计算画布大小以适应所有精灵
  • 处理超出边界的精灵(裁剪)

使用示例

package main

import (
    "image"
    "image/color"
    
    "git.lxtend.com/lixiangwuxian/imagedd/sprite"
)

func main() {
    // 创建精灵板
    board := sprite.NewNamedSpriteBoard()
    
    // 创建精灵
    sprite1 := &sprite.Sprite{
        Name:     "背景",
        Position: image.Point{0, 0},
        Index:    0,
    }
    
    // 创建圆形并添加到精灵
    circle := &sprite.Circle{
        Center: image.Point{50, 50},
        Radius: 30,
        Color:  color.RGBA{0, 0, 255, 255},
    }
    circle.AddToSprite(sprite1)
    
    // 添加到精灵板
    board.AddSprite(sprite1)
    
    // 创建第二个精灵
    sprite2 := &sprite.Sprite{
        Name:     "线条",
        Position: image.Point{20, 20},
        Index:    1,
    }
    
    // 创建线条并添加到精灵
    line := &sprite.Line{
        Start: image.Point{0, 0},
        End:   image.Point{100, 100},
        Width: 2,
        Color: color.RGBA{255, 0, 0, 255},
    }
    line.AddToSprite(sprite2)
    
    // 添加到精灵板
    board.AddSprite(sprite2)
    
    // 渲染并保存
    board.SaveToPng("output.png")
}
Description
golang绘图库
Readme MIT 4.6 MiB
Languages
Go 100%