Une image qui sera certainement incluse dans la création du programme et la création du site Web. Cependant, il est prudent de dire que personne ne sait ce que fait réellement l'ordinateur à l'intérieur. Comprendre et utiliser les principes de fonctionnement de tous les appareils électroniques tels que les caméras est une histoire stupide, et l'image peut être considérée comme la même histoire. Cependant, en tant que programmeur, si je peux modifier l'image à mon goût avec du code, mes rêves se répandront à nouveau, alors j'aimerais parler du traitement d'image en plusieurs parties. pense.
Avant de pouvoir jouer avec l'image, nous devons comprendre à quoi ressemble la structure. Donc, j'ai préparé une image comme ci-dessus, mais il s'agit en fait d'un fichier image créé à l'aide d'un programme.
imageProcess01_1.java
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class imageProcess01_1 {
public static void main(String[] args) {
int width = 100; //Largeur de l'image
int height = 100; //Image verticale
int color = 0; //1 Informations sur la couleur des pixels
int[] rgb = new int[width * height]; //Informations sur la couleur de l'image entière
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
for(int i = 0; i < height; i++) {
for(int j = 0; j < width; j++) {
//Déterminez les coordonnées réelles du tableau
int index = (i * width) + j;
//Changer de couleur en fonction des coordonnées
//Les informations de couleur sont enregistrées au format hexadécimal.
switch(index / 2500) {
case 0: color = 0xFFFF0000; break;
case 1: color = 0xFF00FF00; break;
case 2: color = 0xFF0000FF; break;
default: color = 0xFF000000; break;
}
rgb[index] = color;
}
}
img.setRGB(0, 0, width, height, rgb, 0, width);
try {
ImageIO.write(img, "png", new File("img.png "));
} catch (IOException e) {
e.printStackTrace();
}
}
}
Comme mentionné ci-dessus, vous pouvez générer un fichier image à l'aide de la classe BufferedImage de Java. Ce qui est important ici, c'est l'endroit où la variable d'index est utilisée pour créer les coordonnées du tableau et le nombre hexadécimal qui est distribué par le commutateur. Regardons chacun d'eux.
Lorsque nous regardons une image, nous voyons toujours une image carrée. Cependant, la couleur réelle de l'image n'est pas un tableau à deux dimensions, mais un tableau ordinaire, comme vous pouvez le voir dans le code ci-dessus. Ensuite, la façon dont les couleurs sont réellement affichées est simplement triée dans l'ordre en utilisant la longueur de largeur sans tenir compte de la longueur verticale.
0 | 1 | 2 | 3 | 4 | ... | ... | ... | ... | 99 |
---|---|---|---|---|---|---|---|---|---|
100 | 101 | 102 | ... | ... | ... | ... | ... | ... | 199 |
200 | 201 | 202 | ... | ... | ... | ... | ... | ... | 299 |
300 | 301 | 302 | ... | ... | ... | ... | ... | ... | 399 |
400 | 401 | 402 | ... | ... | ... | ... | ... | ... | 499 |
500 | 501 | 502 | ... | ... | ... | ... | ... | ... | 599 |
600 | 601 | 602 | ... | ... | ... | ... | ... | ... | 699 |
700 | 701 | 702 | ... | ... | ... | ... | ... | ... | 799 |
800 | 801 | 802 | ... | ... | ... | ... | ... | ... | 899 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
9900 | 9901 | 9902 | ... | ... | ... | ... | ... | ... | 9999 |
La couleur de l'image réelle est affichée comme ceci.
imageProcess01_1.java
for(int i = 0; i < height; i++) {
for(int j = 0; j < width; j++) {
//Déterminez les coordonnées réelles du tableau
int index = (i * width) + j;
}
}
Par conséquent, lorsque vous comptez séparément la largeur et les coordonnées verticales en utilisant deux pour des instructions comme celle-ci, les coordonnées réelles du tableau ne peuvent pas être calculées sans utiliser la formule ci-dessus.
Ensuite, voyons quel type de données contient réellement les informations de couleur. Le type de données des informations de couleur est le type Int. La capacité totale du type Int est de 4 octets, mais elle est divisée en 1 octet et chaque octet stocke des informations sur la couleur.
Alpha | Red | Green | Blue |
---|---|---|---|
Opacité | rouge | vert | Bleu |
0 ~ 255 | 0 ~ 255 | 0 ~ 255 | 0 ~ 255 |
Il est enregistré dans cet ordre à partir du premier octet, et chacun peut enregistrer de 0 à 255, soit un total de 256 données. Et comme le nombre 255 est juste FF lorsqu'il est exprimé en hexadécimal, il est plus facile de le contrôler en hexadécimal lors de son utilisation dans le programme. Sur la base de ce tableau, jetons un coup d'œil aux nombres hexadécimaux écrits dans la source ci-dessus.
imageProcess01_1.java
//Changer de couleur en fonction des coordonnées
//Les informations de couleur sont enregistrées au format hexadécimal.
switch(index / 2500) {
case 0: color = 0xFFFF0000; break;
case 1: color = 0xFF00FF00; break;
case 2: color = 0xFF0000FF; break;
default: color = 0xFF000000; break;
}
En Java, tous les nombres commençant par 0x sont exprimés en hexadécimal. Et puisque 1Byte est affiché en utilisant deux caractères, si vous prenez le cas 0: à titre d'exemple, ce sera comme ça.
Alpha | Red | Green | Blue |
---|---|---|---|
FF | FF | 00 | 00 |
255 | 255 | 00 | 00 |
L'opacité et le rouge sont de 255, ce qui signifie un rouge non transparent. Étant donné que le tableau mesure 100x100, les premiers 0 à 2499 du tableau 10000 seront rouges. La couleur de l'image peut être saisie comme ceci.
Il s'agit de la structure d'image de base que le programme charge. Une fois que vous comprenez cette structure, vous pouvez facilement modifier l'image avec juste le code, mais pouvez-vous penser à quelque chose? Pour le moment, j'aimerais parler du traitement d'image réel, mais j'ai pensé que ce serait dommage d'entrer sans connaître les toutes premières bases, alors j'ai pensé que beaucoup de gens le savent, mais j'ai écrit ceci J'ai fait.
Récemment, il existe de nombreuses bibliothèques utiles, etc., et il n'est peut-être pas possible de créer directement une telle fonction de traitement d'image, mais le degré de compréhension dépend de la connaissance ou non du principe. Je pense que cela fera une différence autant que le terrain. Profitons de cette occasion pour faire un traitement d'image simple par vous-même sans compter sur une bibliothèque. À la prochaine.
Recommended Posts