我已经搜索了一段时间,但无法找到我的问题的答案。
首先我将展示两张对比图:
方法一: 方法一 http://img713.imageshack.us/img713/3558/tcg6.jpg
方法2: 方法2 http://img716.imageshack.us/img716/2755/tcg7.jpg
方法 1 从来没有给我带来任何麻烦,但我最近发现它需要的时间太长,方法 2 解决了这个问题。
方法1的代码:
private void drawDefaultOrientation() {
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
int dx = Math.min(x, width - 1 - x);
int dy = Math.min(y, height - 1 - y);
if (dx < borderSize || dy < borderSize) {
inBorder(dx, dy);
}
else {
outBorder(dx, dy);
}
bufferedImage.setRGB(xOffset + x, yOffset + y, color.getRGB());
}
}
}
方法2的代码:
private void drawDefaultOrientation() {
DataBufferInt buffer = (DataBufferInt)bufferedImage.getRaster().getDataBuffer();
int[] pixelArray = buffer.getData();
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
int dx = Math.min(x, width - 1 - x);
int dy = Math.min(y, height - 1 - y);
if (dx < borderSize || dy < borderSize) {
inBorder(dx, dy);
}
else {
outBorder(dx, dy);
}
pixelArray[(xOffset + x) + ((yOffset + y) * bufferedImage.getWidth())] = color.getRGB();
}
}
}
另请注意 inBorder(dx, dy); 和outBorder(dx,dy);将颜色变量设置为具有红色、绿色、蓝色和 Alpha 值的颜色。
被叫代码:
new CustomRectangle(bufferedImage, 220, 90, 15, 245, 5, defaultOrientation) {
@Override
public void inBorder(final int dx, final int dy) {
setColor(new Color(red, green, blue, 255 - Math.min(dx, dy)));
}
@Override
public void outBorder(final int dx, final int dy) {
setColor(new Color(red, green, blue, 128 - Math.min(dx, dy)));
}
}.draw();
我真的很困惑为什么会有色差。
我真的希望那里的任何人都可以帮助我。首先,我认为它与 Alpha 值有关,但正如所见,方法 2 中仍然存在 alpha 变量。
问候。