Я искал какое-то время, но не смог найти ответ на свой вопрос.Java Graphics2D Color Issue
Сначала я покажу два сравнения фотографии:
Метод 1: method 1 http://img713.imageshack.us/img713/3558/tcg6.jpg
Метод 2: method 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); установите цветовую переменную в цвет с красным, зеленым, синим и альфа-значением.
код вызываемого абонента:
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.
С уважением.
Случайное предположение: разные цветовые пространства? http://en.wikipedia.org/wiki/RGB_color_space –
Я мог бы согласиться на это, если бы цвета были действительно очень разными ... Однако я не уверен, что происходит, потому что цвета не так уж далеки друг от друга. – skiwi
Разница в основном в яркости imo. Другой причиной может быть добавленное смещение или сжатие, искажающее значения RGB. Что делает 'bufferedImage.setRGB (...)' делать? –