Go具有出色的图像处理和数据库,但是我在从较小的图像创建一个大图像时遇到了麻烦.有没有人知道如何在Golang中获取两个png或jpeg文件并将它们连接起来形成一个包含两个(或更多)文件的大图像?
我正在读这样的png文件:
imgFile, err := os.Open(path)
if err != nil {
return Image{}, err
}
img, _, err := image.Decode(imgFile)
if err != nil {
return Image{}, err
}
rgba := image.NewRGBA(img.Bounds())
if rgba.Stride != rgba.Rect.Size().X*4 {
return Image{}, fmt.Errorf("unsupported stride")
}
draw.Draw(rgba, rgba.Bounds(), img, image.Point{0, 0}, draw.Src)
Run Code Online (Sandbox Code Playgroud)
我对如何获取这个png RGBA数据并与其他RGBA数据连接和/或将其组合成"空"图像感到困惑.
我目前正在使用GoLang创建游戏.我在测量FPS.我注意到使用for循环附加到切片的7 fps丢失如下:
vertexInfo := Opengl.OpenGLVertexInfo{}
for i := 0; i < 4; i = i + 1 {
vertexInfo.Translations = append(vertexInfo.Translations, float32(s.x), float32(s.y), 0)
vertexInfo.Rotations = append(vertexInfo.Rotations, 0, 0, 1, s.rot)
vertexInfo.Scales = append(vertexInfo.Scales, s.xS, s.yS, 0)
vertexInfo.Colors = append(vertexInfo.Colors, s.r, s.g, s.b, s.a)
}
Run Code Online (Sandbox Code Playgroud)
我正在为每个精灵,每次抽奖做这个.问题是为什么我只是循环一次并将相同的东西添加到这些切片中,从而获得如此巨大的性能损失?有没有更有效的方法来做到这一点?这并不像我正在添加大量数据.每个切片包含大约16个元素,如上所示(4 x 4).
当我简单地将所有16个元素放在一个中时,[]float32{1..16}
fps会提高大约4个.
更新:我对每个追加进行了基准测试,似乎每个追踪都需要1个fps才能执行..考虑到这些数据非常静态,这似乎很多..我只需要4次迭代......
更新: 添加了github repo https://github.com/Triangle345/GT
我发现令人惊讶的是,很难找到 sampler2d 数组的示例,例如
uniform sampler2D myTextureSampler[5];
Run Code Online (Sandbox Code Playgroud)
如何存储这个的统一位置?:
gl.GetUniformLocation(program, "myTextureSampler")
Run Code Online (Sandbox Code Playgroud)
一个人会简单地使用:
gl.GetUniformLocation(program, "myTextureSampler[0]")
gl.GetUniformLocation(program2, "myTextureSampler[2]")
Run Code Online (Sandbox Code Playgroud)
如何使用这样的多个纹理:
gl.BindTexture(gl.TEXTURE_2D, 1)
gl.BindTexture(gl.TEXTURE_2D, 2)
Run Code Online (Sandbox Code Playgroud)
等等..
gl.ActiveTexture(gl.TEXTURE0)
gl.ActiveTexture(gl.TEXTURE1)
Run Code Online (Sandbox Code Playgroud)
等等..
注意:此代码不是纯 c++ opengl。只是寻找有关如何完成的基本概念。
一个简单的传递示例,为 sampler2d 数组获取统一位置会很棒。有没有人有这方面的经验?
所以假设我有一个包含模块/类的zip文件.然后我读了这个文件 - 读取二进制文件("rb")将其存储到内存中.我如何将此zip文件存入内存并从中加载模块.我需要为此编写一个导入钩子吗?一个人不能简单地从内存中运行exec二进制zip数据,可以吗?
我知道从磁盘上的普通zip文件加载模块很简单,因为这是由python2.7自动完成的.然而,我; 想知道这是否可以通过记忆.
更新:很多人都提到从磁盘导入zip.问题是我想从内存NOT磁盘导入zip.我显然会逐字节地将它从磁盘读入内存.我想从构成zip文件的内存中获取所有这些字节,并将其用作常规导入.
我目前正在使用Haxe,特别是haxeflixel用于开发.真正让我烦恼的一件事是构建/编译时间.我甚至没有编译到c ++目标,但决定编译到neko vm,因为我认为它可能更快.然而; neko debug(或release)的编译时间大约是4或5秒.每次我想看到一个结果时都要等这么久才会让它变得糟透了:).
我甚至尝试使用-v命令进行调试,占用时间最多的部分是:
Running command: BUILD
- Copying library file:
C:\HaxeToolkit\haxe\lib\lime/2,9,1/legacy/ndll/Windows/lime-legacy.ndll -> export/windows/neko/
bin/lime-legacy.ndll
- Running command: haxe export/windows/neko/haxe/release.hxml
Run Code Online (Sandbox Code Playgroud)
从上面的摘录看,似乎一切都表现正常,这让我担心,因为我不希望正常这么慢.
现在4到5秒对一些人来说可能看起来不是很多,但是Golang,javascript,java和其他超级快速编译的语言在那里 - 我被宠坏了.还有另一个我可以编译的目标,我不知道哪个会比neko vm编译更快?有什么办法可以提高编译速度或进一步调试编译速度慢的原因吗?
go ×2
graphics ×2
append ×1
compilation ×1
haxe ×1
haxeflixel ×1
haxelib ×1
image ×1
opengl ×1
performance ×1
png ×1
python ×1
shader ×1
slice ×1