Maison >Java >javaDidacticiel >Code d'implémentation pour l'effet multiplicateur du traitement d'image Java

Code d'implémentation pour l'effet multiplicateur du traitement d'image Java

黄舟
黄舟original
2017-09-29 10:14:592761parcourir

L'effet de multiplication est un effet que nous voyons habituellement dans Photoshop. L'article suivant présente principalement comment utiliser Java pour obtenir l'effet de multiplication. Il est partagé pour votre référence et votre apprentissage. référence et étude. Les amis dans le besoin peuvent s'y référer. Jetons un coup d'œil à l'introduction détaillée.

Avant-propos

Cet article présente principalement comment utiliser Java pour obtenir l'effet de multiplication, et le partage pour votre référence et votre étude. Pas grand-chose. Pour dire ci-dessous, jetons un coup d'œil à l'introduction détaillée.

Multiplier est un mode de fusion dans Photoshop. En termes simples, il permet de mélanger le contenu de deux calques.


Le meilleur cas d'utilisation de démonstration dans PS

La formule de calcul pour la fusion est en fait très simple, qui est A*B/255. (A et B font référence au calque A et au calque B)

Une explication supplémentaire est :

Le canal rouge dans le calque A et le canal rouge dans le calque B L'échelle de gris la valeur de chaque pixel correspondant au canal rouge est multipliée et divisée par 255. Obtenez une nouvelle chaîne rouge. Il en va de même pour les canaux bleu et vert.

Méthode d'implémentation

La valeur en niveaux de gris du pixel d'un certain canal peut en fait être directement remplacée par sa valeur RVB correspondante. Utilisez le code ci-dessous pour. Expliquez ce processus.

Encapsulez d'abord une méthode pour obtenir le tableau RVB correspondant basé sur les pixels, qui sera utilisé plus tard


public static int[] getRGB(int pixel) {
 int r = (pixel >> 16) & 0xff;
 int g = (pixel >> 8) & 0xff;
 int b = pixel & 0xff;
 return new int[]{r, g, b};
}

puis parcourez les pixels de l'image. Les points du processus de traversée sont omis. Entrez directement dans l'étape de traitement


// 先获取两个图层同一位置的像素值
int pixelA = imgA.getRGB(x, y);
int pixelB = imgB.getRGB(x, y);
// 获取两组RGB数组
int[] rgb1 = getRGB(pixelA);
int[] rgb2 = getRGB(pixelB);
// 根据公式分别计算新的RGB值
int r = rgb1[0] * rgb2[0] / 255;
int g = rgb1[1] * rgb2[1] / 255;
int b = rgb1[2] * rgb2[2] / 255; 
// 获得正片叠底后的像素值
int pixelNew = new Color(r, g, b).getRGB();

Récupérez les nouveaux pixels et définissez-les directement dans la nouvelle image.

Cette méthode a été encapsulée par moi et placée dans la barre d'outils Images de Nutz (téléchargement local). Voici un exemple d'appel de Nutz, qui peut être modifié et utilisé directement.

Par exemple, ajoutons un soleil au Général Jin :


Général Jin

Big Sun


// 先获取两张图片
BufferedImage imgA = Images.read(new File("金将军.jpg"));
BufferedImage imgB = Images.read(new File("大太阳.jpg"));
// 正片叠底
BufferedImage imgMultiply = Images.multiply(imgA, imgB, 0, 0);
// 输出到文件
Images.write(imgMultiply, new File("大太阳金将军.jpg"));

Image du résultat de sortie :


Big Sun Golden General, haha, mais la sélection de ceci le soleil est un peu insuffisant Dominateur

Bien sûr, ce code peut en fait être écrit sur une seule ligne


Images.write(Images.multiply(Images.read(new File("金将军.jpg")), Images.read(new File("大太阳.jpg")), 0, 0), new File("大太阳金将军.jpg"));

N'est-ce pas très simple^_ ^

  • Traitement d'image de base

  • Méthodes plus avancées

Résumé

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn