go语言指南之切片练习
2024-09-02 14:38:49
题目: 实现 Pic
。它应当返回一个长度为 dy
的切片,其中每个元素是一个长度为 dx
,元素类型为 uint8
的切片。当你运行此程序时,它会将每个整数解释为灰度值(好吧,其实是蓝度值)并显示它所对应的图像。图像的选择由你来定。几个有趣的函数包括 (x+y)/2
, x*y
, x^y
, x*log(y)
和 x%(y+1)
。
(提示:需要使用循环来分配 [][]uint8
中的每个 []uint8
;请使用 uint8(intValue)
在类型之间转换;你可能会用到 math
包中的函数。)
package main import "golang.org/x/tour/pic"
func Pic(dx, dy int) [][]uint8 {
a :=make([][]uint8,dy)
for y:=range a {
b:=make([]uint8,dx)
for x:=range b{
b[x]=uint8(x^y)
}
a[y]=b
}
return a
} func main() {
pic.Show(Pic) }
由于我们dx,dy是两个变量,所以就需要像动态数组那样进行动态创建。切片在用法上和数组比较类似。我需要先用make函数创建外切片,类似与一个动态二维数组中的行元素,之后我们再创建内切片,相当与一个一维数组,然后再将每一个内切片复制给外切片。
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. package pic // import "golang.org/x/tour/pic" import (
"bytes"
"encoding/base64"
"fmt"
"image"
"image/png"
) func Show(f func(int, int) [][]uint8) {
const (
dx = 256
dy = 256
)
data := f(dx, dy)
m := image.NewNRGBA(image.Rect(0, 0, dx, dy))
for y := 0; y < dy; y++ {
for x := 0; x < dx; x++ {
v := data[y][x]
i := y*m.Stride + x*4
m.Pix[i] = v
m.Pix[i+1] = v
m.Pix[i+2] = 255
m.Pix[i+3] = 255
}
}
ShowImage(m)
} func ShowImage(m image.Image) {
var buf bytes.Buffer
err := png.Encode(&buf, m)
if err != nil {
panic(err)
}
enc := base64.StdEncoding.EncodeToString(buf.Bytes())
fmt.Println("IMAGE:" + enc)
}
最新文章
- WebView中实现文件下载功能
- SU Demos-04Deconvolution-01FX
- Unity3d NGUI 地图
- 利用IIS7 解决URL访问限制问题
- java.text.MessageFormat格式化字符串时的小技巧
- 王立平--Unity中间GUI Skin
- PHP中的表单提交和获取
- kettle介绍
- linux的学习之路--(五)bash及其特性
- Encrypt2
- Pulse-per-second (PPS) Signal Interfacing
- windows云服务器数据迁移
- openssl链接动态库的方法
- 在Centos7下安装nghttp2
- 『计算机视觉』mini深度学习框架实现
- 一个 react 小的 demo
- c++ 函数中的部分代码执行一次
- XFF的学习+修改源码--Are you in class
- Web安全之XSS(Cross Site Scripting)深入理解
- Extjs4.x treegrid,check-tree,locked getChecked() 方法错误