题目:  实现 Pic。它应当返回一个长度为 dy 的切片,其中每个元素是一个长度为 dx,元素类型为 uint8 的切片。当你运行此程序时,它会将每个整数解释为灰度值(好吧,其实是蓝度值)并显示它所对应的图像。图像的选择由你来定。几个有趣的函数包括 (x+y)/2x*yx^yx*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)
}

  

最新文章

  1. WebView中实现文件下载功能
  2. SU Demos-04Deconvolution-01FX
  3. Unity3d NGUI 地图
  4. 利用IIS7 解决URL访问限制问题
  5. java.text.MessageFormat格式化字符串时的小技巧
  6. 王立平--Unity中间GUI Skin
  7. PHP中的表单提交和获取
  8. kettle介绍
  9. linux的学习之路--(五)bash及其特性
  10. Encrypt2
  11. Pulse-per-second (PPS) Signal Interfacing
  12. windows云服务器数据迁移
  13. openssl链接动态库的方法
  14. 在Centos7下安装nghttp2
  15. 『计算机视觉』mini深度学习框架实现
  16. 一个 react 小的 demo
  17. c++ 函数中的部分代码执行一次
  18. XFF的学习+修改源码--Are you in class
  19. Web安全之XSS(Cross Site Scripting)深入理解
  20. Extjs4.x treegrid,check-tree,locked getChecked() 方法错误

热门文章

  1. POJ-2528 Mayor&#39;s posters(线段树区间更新+离散化)
  2. hdu 2586 How far away ?(LCA模板)(倍增法)
  3. docker里修改时间
  4. linux chmod命令修改文件权限
  5. 关于dubbo接口性能测试
  6. window server 2012+apache+django
  7. svn使用3 (转)
  8. 蒲公英Ghost Win 7 Sp1(x86/x64)旗舰版 201910
  9. OpenCV 改变图像的对比度和亮度
  10. AUTO Uninstaller 常见问题