Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
10d94077
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
10d94077
编写于
3月 24, 2011
作者:
M
mrkam
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
7027678: /applets/DitherTest demo needs to be improved
Reviewed-by: rupashka
上级
f2e8a489
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
118 addition
and
95 deletion
+118
-95
src/share/demo/applets/DitherTest/DitherTest.java
src/share/demo/applets/DitherTest/DitherTest.java
+118
-95
未找到文件。
src/share/demo/applets/DitherTest/DitherTest.java
浏览文件 @
10d94077
/*
* Copyright (c) 1997, 20
06
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 20
11
, Oracle and/or its affiliates. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
...
...
@@ -29,25 +29,43 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
*/
import
java.applet.Applet
;
import
java.awt.event.*
;
import
java.awt.*
;
import
java.awt.AWTEvent
;
import
java.awt.BorderLayout
;
import
java.awt.Button
;
import
java.awt.Canvas
;
import
java.awt.Choice
;
import
java.awt.Color
;
import
java.awt.Dimension
;
import
java.awt.FlowLayout
;
import
java.awt.FontMetrics
;
import
java.awt.Frame
;
import
java.awt.Graphics
;
import
java.awt.Image
;
import
java.awt.Label
;
import
java.awt.LayoutManager
;
import
java.awt.Panel
;
import
java.awt.TextField
;
import
java.awt.Toolkit
;
import
java.awt.event.ActionEvent
;
import
java.awt.event.ActionListener
;
import
java.awt.event.KeyEvent
;
import
java.awt.event.TextEvent
;
import
java.awt.image.ColorModel
;
import
java.awt.image.MemoryImageSource
;
enum
DitherMethod
{
NOOP
,
RED
,
GREEN
,
BLUE
,
ALPHA
,
SATURATION
};
@SuppressWarnings
(
"serial"
)
public
class
DitherTest
extends
Applet
implements
Runnable
{
final
private
static
int
NOOP
=
0
;
final
private
static
int
RED
=
1
;
final
private
static
int
GREEN
=
2
;
final
private
static
int
BLUE
=
3
;
final
private
static
int
ALPHA
=
4
;
final
private
static
int
SATURATION
=
5
;
private
Thread
runner
;
private
DitherControls
XControls
;
private
DitherControls
YControls
;
private
DitherCanvas
canvas
;
...
...
@@ -62,6 +80,7 @@ public class DitherTest extends Applet implements Runnable {
ditherTest
.
start
();
}
@Override
public
void
init
()
{
String
xspec
=
null
,
yspec
=
null
;
int
xvals
[]
=
new
int
[
2
];
...
...
@@ -70,7 +89,7 @@ public class DitherTest extends Applet implements Runnable {
try
{
xspec
=
getParameter
(
"xaxis"
);
yspec
=
getParameter
(
"yaxis"
);
}
catch
(
NullPointerException
npe
)
{
}
catch
(
NullPointerException
ignored
)
{
//only occurs if run as application
}
...
...
@@ -80,44 +99,34 @@ public class DitherTest extends Applet implements Runnable {
if
(
yspec
==
null
)
{
yspec
=
"blue"
;
}
int
xmethod
=
colorm
ethod
(
xspec
,
xvals
);
int
ymethod
=
colorm
ethod
(
yspec
,
yvals
);
DitherMethod
xmethod
=
colorM
ethod
(
xspec
,
xvals
);
DitherMethod
ymethod
=
colorM
ethod
(
yspec
,
yvals
);
setLayout
(
new
BorderLayout
());
XControls
=
new
DitherControls
(
this
,
xvals
[
0
],
xvals
[
1
],
xmethod
,
false
);
xmethod
,
false
);
YControls
=
new
DitherControls
(
this
,
yvals
[
0
],
yvals
[
1
],
ymethod
,
true
);
ymethod
,
true
);
YControls
.
addRenderButton
();
add
(
"North"
,
XControls
);
add
(
"South"
,
YControls
);
add
(
"Center"
,
canvas
=
new
DitherCanvas
());
}
private
int
colorm
ethod
(
String
s
,
int
vals
[])
{
int
method
=
NOOP
;
private
DitherMethod
colorM
ethod
(
String
s
,
int
vals
[])
{
DitherMethod
method
=
DitherMethod
.
NOOP
;
if
(
s
==
null
)
{
s
=
""
;
}
String
lower
=
s
.
toLowerCase
();
int
len
=
0
;
if
(
lower
.
startsWith
(
"red"
))
{
method
=
RED
;
lower
=
lower
.
substring
(
3
);
}
else
if
(
lower
.
startsWith
(
"green"
))
{
method
=
GREEN
;
lower
=
lower
.
substring
(
5
);
}
else
if
(
lower
.
startsWith
(
"blue"
))
{
method
=
BLUE
;
lower
=
lower
.
substring
(
4
);
}
else
if
(
lower
.
startsWith
(
"alpha"
))
{
method
=
ALPHA
;
lower
=
lower
.
substring
(
5
);
}
else
if
(
lower
.
startsWith
(
"saturation"
))
{
method
=
SATURATION
;
lower
=
lower
.
substring
(
10
);
for
(
DitherMethod
m
:
DitherMethod
.
values
())
{
if
(
lower
.
startsWith
(
m
.
toString
().
toLowerCase
()))
{
method
=
m
;
lower
=
lower
.
substring
(
m
.
toString
().
length
());
}
}
if
(
method
==
NOOP
)
{
if
(
method
==
DitherMethod
.
NOOP
)
{
vals
[
0
]
=
0
;
vals
[
1
]
=
0
;
return
method
;
...
...
@@ -132,7 +141,7 @@ public class DitherTest extends Applet implements Runnable {
begval
=
Integer
.
parseInt
(
lower
.
substring
(
0
,
dash
));
endval
=
Integer
.
parseInt
(
lower
.
substring
(
dash
+
1
));
}
}
catch
(
NumberFormatException
nfe
)
{
}
catch
(
NumberFormatException
ignored
)
{
}
if
(
begval
<
0
)
{
...
...
@@ -173,16 +182,14 @@ public class DitherTest extends Applet implements Runnable {
c
[
0
]
=
c
[
1
]
=
c
[
2
]
=
0
;
c
[
3
]
=
255
;
if
(
xmethod
<
ymethod
)
{
apply
m
ethod
(
c
,
xmethod
,
i
,
width
,
xvals
);
apply
m
ethod
(
c
,
ymethod
,
j
,
height
,
yvals
);
apply
M
ethod
(
c
,
xmethod
,
i
,
width
,
xvals
);
apply
M
ethod
(
c
,
ymethod
,
j
,
height
,
yvals
);
}
else
{
apply
m
ethod
(
c
,
ymethod
,
j
,
height
,
yvals
);
apply
m
ethod
(
c
,
xmethod
,
i
,
width
,
xvals
);
apply
M
ethod
(
c
,
ymethod
,
j
,
height
,
yvals
);
apply
M
ethod
(
c
,
xmethod
,
i
,
width
,
xvals
);
}
pixels
[
index
++]
=
((
c
[
3
]
<<
24
)
|
(
c
[
0
]
<<
16
)
|
(
c
[
1
]
<<
8
)
|
c
[
2
]);
pixels
[
index
++]
=
((
c
[
3
]
<<
24
)
|
(
c
[
0
]
<<
16
)
|
(
c
[
1
]
<<
8
)
|
c
[
2
]);
}
// Poll once per row to see if we've been told to stop.
...
...
@@ -191,51 +198,54 @@ public class DitherTest extends Applet implements Runnable {
}
}
return
createImage
(
new
MemoryImageSource
(
width
,
height
,
ColorModel
.
getRGBdefault
(),
pixels
,
0
,
width
));
ColorModel
.
getRGBdefault
(),
pixels
,
0
,
width
));
}
private
void
applymethod
(
int
c
[],
int
method
,
int
step
,
int
total
,
int
vals
[])
{
if
(
method
==
NOOP
)
{
private
void
applyMethod
(
int
c
[],
int
methodIndex
,
int
step
,
int
total
,
int
vals
[])
{
DitherMethod
method
=
DitherMethod
.
values
()[
methodIndex
];
if
(
method
==
DitherMethod
.
NOOP
)
{
return
;
}
int
val
=
((
total
<
2
)
?
vals
[
0
]
:
vals
[
0
]
+
((
vals
[
1
]
-
vals
[
0
])
*
step
/
(
total
-
1
)));
?
vals
[
0
]
:
vals
[
0
]
+
((
vals
[
1
]
-
vals
[
0
])
*
step
/
(
total
-
1
)));
switch
(
method
)
{
case
RED:
c
[
0
]
=
val
;
break
;
case
GREEN:
c
[
1
]
=
val
;
break
;
case
BLUE:
c
[
2
]
=
val
;
break
;
case
ALPHA:
c
[
3
]
=
val
;
break
;
case
SATURATION:
int
max
=
Math
.
max
(
Math
.
max
(
c
[
0
],
c
[
1
]),
c
[
2
]);
int
min
=
max
*
(
255
-
val
)
/
255
;
if
(
c
[
0
]
==
0
)
{
c
[
0
]
=
min
;
}
if
(
c
[
1
]
==
0
)
{
c
[
1
]
=
min
;
}
if
(
c
[
2
]
==
0
)
{
c
[
2
]
=
min
;
}
break
;
case
RED:
c
[
0
]
=
val
;
break
;
case
GREEN:
c
[
1
]
=
val
;
break
;
case
BLUE:
c
[
2
]
=
val
;
break
;
case
ALPHA:
c
[
3
]
=
val
;
break
;
case
SATURATION:
int
max
=
Math
.
max
(
Math
.
max
(
c
[
0
],
c
[
1
]),
c
[
2
]);
int
min
=
max
*
(
255
-
val
)
/
255
;
if
(
c
[
0
]
==
0
)
{
c
[
0
]
=
min
;
}
if
(
c
[
1
]
==
0
)
{
c
[
1
]
=
min
;
}
if
(
c
[
2
]
==
0
)
{
c
[
2
]
=
min
;
}
break
;
}
}
@Override
public
void
start
()
{
runner
=
new
Thread
(
this
);
runner
.
start
();
}
@Override
public
void
run
()
{
canvas
.
setImage
(
null
);
// Wipe previous image
Image
img
=
calculateImage
();
...
...
@@ -244,35 +254,43 @@ public class DitherTest extends Applet implements Runnable {
}
}
@Override
public
void
stop
()
{
runner
=
null
;
}
@Override
public
void
destroy
()
{
remove
(
XControls
);
remove
(
YControls
);
remove
(
canvas
);
}
@Override
public
String
getAppletInfo
()
{
return
"An interactive demonstration of dithering."
;
}
@Override
public
String
[][]
getParameterInfo
()
{
String
[][]
info
=
{
{
"xaxis"
,
"{RED, GREEN, BLUE, ALPHA, SATURATION}"
,
"The color of the Y axis. Default is RED."
},
{
"yaxis"
,
"{RED, GREEN, BLUE, ALPHA, SATURATION}"
,
"The color of the X axis. Default is BLUE."
}
{
"xaxis"
,
"{RED, GREEN, BLUE, ALPHA, SATURATION}"
,
"The color of the Y axis. Default is RED."
},
{
"yaxis"
,
"{RED, GREEN, BLUE, ALPHA, SATURATION}"
,
"The color of the X axis. Default is BLUE."
}
};
return
info
;
}
}
@SuppressWarnings
(
"serial"
)
class
DitherCanvas
extends
Canvas
{
private
Image
img
;
private
static
String
calcString
=
"Calculating..."
;
@Override
public
void
paint
(
Graphics
g
)
{
int
w
=
getSize
().
width
;
int
h
=
getSize
().
height
;
...
...
@@ -288,14 +306,17 @@ class DitherCanvas extends Canvas {
}
}
@Override
public
void
update
(
Graphics
g
)
{
paint
(
g
);
}
@Override
public
Dimension
getMinimumSize
()
{
return
new
Dimension
(
20
,
20
);
}
@Override
public
Dimension
getPreferredSize
()
{
return
new
Dimension
(
200
,
200
);
}
...
...
@@ -310,29 +331,29 @@ class DitherCanvas extends Canvas {
}
}
@SuppressWarnings
(
"serial"
)
class
DitherControls
extends
Panel
implements
ActionListener
{
private
CardinalTextField
start
;
private
CardinalTextField
end
;
private
Button
button
;
private
Choice
choice
;
private
DitherTest
applet
;
private
static
LayoutManager
dcLayout
=
new
FlowLayout
(
FlowLayout
.
CENTER
,
10
,
5
);
10
,
5
);
public
DitherControls
(
DitherTest
app
,
int
s
,
int
e
,
int
type
,
boolean
vertical
)
{
public
DitherControls
(
DitherTest
app
,
int
s
,
int
e
,
DitherMethod
type
,
boolean
vertical
)
{
applet
=
app
;
setLayout
(
dcLayout
);
add
(
new
Label
(
vertical
?
"Vertical"
:
"Horizontal"
));
add
(
choice
=
new
Choice
());
choice
.
addItem
(
"Noop"
);
choice
.
addItem
(
"Red"
);
choice
.
addItem
(
"Green"
);
choice
.
addItem
(
"Blue"
);
choice
.
addItem
(
"Alpha"
);
choice
.
addItem
(
"Saturation"
);
choice
.
select
(
type
);
for
(
DitherMethod
m
:
DitherMethod
.
values
())
{
choice
.
addItem
(
m
.
toString
().
substring
(
0
,
1
)
+
m
.
toString
().
substring
(
1
).
toLowerCase
());
}
choice
.
select
(
type
.
ordinal
());
add
(
start
=
new
CardinalTextField
(
Integer
.
toString
(
s
),
4
));
add
(
end
=
new
CardinalTextField
(
Integer
.
toString
(
e
),
4
));
}
...
...
@@ -369,6 +390,7 @@ class DitherControls extends Panel implements ActionListener {
}
/* called when user clicks the button */
@Override
public
void
actionPerformed
(
ActionEvent
e
)
{
if
(
e
.
getSource
()
==
button
)
{
applet
.
start
();
...
...
@@ -376,6 +398,8 @@ class DitherControls extends Panel implements ActionListener {
}
}
@SuppressWarnings
(
"serial"
)
class
CardinalTextField
extends
TextField
{
String
oldText
=
null
;
...
...
@@ -391,6 +415,7 @@ class CardinalTextField extends TextField {
// function, but this is neater, since ideally, it would prevent
// the text from appearing at all. Sigh. See bugid 4100317/4114565.
//
@Override
protected
void
processEvent
(
AWTEvent
evt
)
{
int
id
=
evt
.
getID
();
if
(
id
!=
KeyEvent
.
KEY_TYPED
)
{
...
...
@@ -420,6 +445,7 @@ class CardinalTextField extends TextField {
// Note: it would be easy to extend this to an eight-bit
// TextField (range 0-255), but I'll leave it as-is.
//
@Override
protected
void
processTextEvent
(
TextEvent
te
)
{
// The empty string is okay, too
String
newText
=
getText
();
...
...
@@ -436,11 +462,8 @@ class CardinalTextField extends TextField {
// Returns true for Cardinal (non-negative) numbers
// Note that the empty string is not allowed
private
boolean
textIsCardinal
(
String
textToCheck
)
{
int
value
=
-
1
;
try
{
value
=
Integer
.
parseInt
(
textToCheck
,
10
);
return
(
value
>=
0
);
return
Integer
.
parseInt
(
textToCheck
,
10
)
>=
0
;
}
catch
(
NumberFormatException
nfe
)
{
return
false
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录