Как лучше всего вытаскивать RGB из картинки в массив? Какой массив лучше использовать ( одномерный, двумерный, трехмерный), тип byte или int ? если тип int то он складывается из R+G+B , но когда обратно преобразуется, откуда он знает какие изначальные данные?? Мне нужна работа с эффектами на фото, хелп!
Сергей Горностаев, хм, а если у меня имеются наработки своих эффектов, аналогов нет( в java точно), как тогда быть, если писать свою библиотеку, то мне же нужно иметь что-то матрицу, массив? Или можно другим путем?
hHup, если вы портируете в java код из другого языка, то придётся ориентироваться на требования этого кода. Если он ожидает трёхмерного байтового массива, преобразовывать изображение в трёхмерный байтовый массив. Если чего-то другого, преобразовывать во что-то другое. Хотя быстродействие таких поделок обычно оказывается крайне печальным.
Сергей Горностаев, нет , я работаю только с java, т.е. никакого другого кода, только java, и если вы говорите что массив байтов лучше не вытаскивать, то как правильно будет ?
Сергей Горностаев, сейчас его нет, все что я придумал я реализовал математически , теперь логика такая, есть некий класс, он принимает file ( png, jpg), меняет цвета по мат законам, и возвращает изображение. Но что бы менять это цвета мне нужно как-то их получить ( как я делал выше, массив байтов), но вы сказали что лучше так не делать, вот я и хочу узнать как правильно.
hHup, ааа, теперь понятно, вы теоретик и изобретаете велосипед. Тогда используйте ImageIO чтобы считать файл в BufferedImage, получайте из него методом getRGB массив int и выполняйте необходимые вам преобразования.
32-битный int позволяет хранить точное значение цвета в 24-битной палитре (это как раз R+G+B) плюс 255 градаций прозрачности. Соответственно, картинку допустимо хранить в одномерном массиве int, заведя дополнительную переменную для хранения ширины картинки (чтобы знать на какой точке выполнять "перенос строк"). Выделение отдельных каналов - это обычная работа с байтами (см. сдвиг байт), а наложение эффектов - вообще, тема для отдельного разговора ).
Помимо этого, Java предлагает класс java.awt.Color, упрощающий работу с цветом.