Я бы предложил вам использовать boolean[][]
для хранения ваших пикселей.Использование двойников для хранения ваших координат - ужасная трата памяти.Я бы рекомендовал следующий подход:
boolean[][] pixBool;
BufferedImage img;
for(int a = 0; a < pixBool.length;a++){
for(int b = 0; b < pixBool[0].length;b++){
boolean pix = pixBool[a][b];
if(pix){
img.setRGB(a,b,0xff000000);
}
}
}
В этом случае белый (0xffffffff) пиксель будет сохранен в массиве pixBool как ложный, тогда как черный (0xff000000) будет сохранен как истинный.Таким образом, после инициализации массива все изображение будет белым (фон).Изображение будет создано путем манипулирования пикселями заданного BufferedImage
с помощью метода setRGB()
.
Если вам действительно нужно работать с двойными числами, вы можете преобразовать их и затем использовать вышеупомянутый метод:
double[] coordinates;
for(int c = 0; c < coordinates.length; c++){
double coord = coordinates[c];
BigDecimal x = BigDecimal.valueOf((int)coord);
BigDecimal y = BigDecimal.valueOf(coord);
y = y.subtract(x);
y = y.scaleByPowerOfTen(y.scale);
pixBool[(int)x.longValue()][(int)y.longValue()] = true;
}
Чтобы извлечь координату x, вам просто нужно извлечь всю часть двойного числа, что можно легко сделать, преобразовав ее в int и, таким образом, потеряв дробную часть.Координата Y является сложной частью.Вы должны использовать класс BigDecimal из-за неопределенности double.Сначала вы должны извлечь дробную часть числа, потому что там хранятся ваши координаты.Это может быть достигнуто путем вычитания всей части числа.После этого вы должны масштабировать извлеченную дробную часть, чтобы получить целое число.Это делается путем умножения на 10 до степени количества цифр после точки (метод шкалы).После этого вам просто нужно извлечь вычисленные числа из класса BigDecimal, и вы закончите.
Вы также можете использовать более тупой подход с использованием класса String:
double[] coordinates;
for(int c = 0; c < coordinates.length; c++){
double coord = coordinates[c];
String temp = String.valueOf(coord);
String [] temp2 = temp.split(".");
int x = Integer.valueOf(temp2[0]);
int y = Integer.valueOf(temp[1]);
pixBool[x][y] = true;
}
В этомВ этом случае вы сначала конвертируете свою координату в String
, а затем разбиваете ее вокруг десятичной точки.Это даст вам String[]
с двумя записями: целая часть вашего числа (она же координата x) и дробная часть (она же координата y).Затем вам просто нужно преобразовать строки обратно в int, а затем использовать их для заполнения логического [].