Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
G
golang
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
go
golang
Commits
130b29b6
Commit
130b29b6
authored
Feb 18, 2012
by
Nigel Tao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
image: add Decode example.
R=r, bradfitz, r, adg CC=golang-dev
https://golang.org/cl/5675076
parent
420f713b
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
79 additions
and
0 deletions
+79
-0
decode_example_test.go
src/pkg/image/decode_example_test.go
+79
-0
No files found.
src/pkg/image/decode_example_test.go
0 → 100644
View file @
130b29b6
// Copyright 2012 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.
// This example demonstrates decoding a JPEG image and examining its pixels.
package
image_test
import
(
"fmt"
"image"
"log"
"os"
// Package image/jpeg is not used explicitly in the code below,
// but is imported for its initialization side-effect, which allows
// image.Decode to understand JPEG formatted images. Uncomment these
// two lines to also understand GIF and PNG images:
// _ "image/gif"
// _ "image/png"
_
"image/jpeg"
)
func
Example
()
{
// Open the file.
file
,
err
:=
os
.
Open
(
"testdata/video-001.jpeg"
)
if
err
!=
nil
{
log
.
Fatal
(
err
)
}
defer
file
.
Close
()
// Decode the image.
m
,
_
,
err
:=
image
.
Decode
(
file
)
if
err
!=
nil
{
log
.
Fatal
(
err
)
}
bounds
:=
m
.
Bounds
()
// Calculate a 16-bin histogram for m's red, green, blue and alpha components.
//
// An image's bounds do not necessarily start at (0, 0), so the two loops start
// at bounds.Min.Y and bounds.Min.X. Looping over Y first and X second is more
// likely to result in better memory access patterns than X first and Y second.
var
histogram
[
16
][
4
]
int
for
y
:=
bounds
.
Min
.
Y
;
y
<
bounds
.
Max
.
Y
;
y
++
{
for
x
:=
bounds
.
Min
.
X
;
x
<
bounds
.
Max
.
X
;
x
++
{
r
,
g
,
b
,
a
:=
m
.
At
(
x
,
y
)
.
RGBA
()
// A color's RGBA method returns values in the range [0, 65535].
// Shifting by 12 reduces this to the range [0, 15].
histogram
[
r
>>
12
][
0
]
++
histogram
[
g
>>
12
][
1
]
++
histogram
[
b
>>
12
][
2
]
++
histogram
[
a
>>
12
][
3
]
++
}
}
// Print the results.
fmt
.
Printf
(
"%-14s %6s %6s %6s %6s
\n
"
,
"bin"
,
"red"
,
"green"
,
"blue"
,
"alpha"
)
for
i
,
x
:=
range
histogram
{
fmt
.
Printf
(
"0x%04x-0x%04x: %6d %6d %6d %6d
\n
"
,
i
<<
12
,
(
i
+
1
)
<<
12
-
1
,
x
[
0
],
x
[
1
],
x
[
2
],
x
[
3
])
}
// Output:
// bin red green blue alpha
// 0x0000-0x0fff: 471 819 7596 0
// 0x1000-0x1fff: 576 2892 726 0
// 0x2000-0x2fff: 1038 2330 943 0
// 0x3000-0x3fff: 883 2321 1014 0
// 0x4000-0x4fff: 501 1295 525 0
// 0x5000-0x5fff: 302 962 242 0
// 0x6000-0x6fff: 219 358 150 0
// 0x7000-0x7fff: 352 281 192 0
// 0x8000-0x8fff: 3688 216 246 0
// 0x9000-0x9fff: 2277 237 283 0
// 0xa000-0xafff: 971 254 357 0
// 0xb000-0xbfff: 317 306 429 0
// 0xc000-0xcfff: 203 402 401 0
// 0xd000-0xdfff: 256 394 241 0
// 0xe000-0xefff: 378 343 173 0
// 0xf000-0xffff: 3018 2040 1932 15450
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment