个性化阅读
专注于IT技术分析

Java中的图像处理S6(将彩色图像转换为棕褐色图像)

我们强烈建议你在下面的帖子中提及此内容。

  • Java中的图像处理设置1(读和写)
  • Java中的图像处理设置2(获取并设置像素)

在此设置中, 我们将把彩色图像转换为棕褐色图像。

在一个棕褐色image图像的Alpha分量将与原始图像相同(因为alpha分量表示透明度), 但RGB将更改, 它将通过以下公式计算。

newRed = 0.393*R + 0.769*G + 0.189*B
newGreen = 0.349*R + 0.686*G + 0.168*B
newBlue = 0.272*R + 0.534*G + 0.131*B

If any of these output values is greater than 255, simply set it to 255.
These specific values are the values for sepia tone 
that are recommended by Microsoft.

算法:

  1. 获取像素的RGB值。
  2. 使用以上公式计算newRed, newGree, newBlue(取整数值)
  3. 根据以下条件设置像素的新RGB值:
    • 如果newRed> 255, 则R = 255, 否则R = newRed
    • 如果newGreen> 255, 则G = 255, 否则G = newGreen
    • 如果newBlue> 255, 则B = 255, 否则B = newBlue
  4. 将R, G和B的值替换为我们为像素计算的新值。
  5. 对图像的每个像素重复步骤1至步骤4。

实现以上算法的:

//Java program to demonstrate colored to sepia conversion
import java.io.File;
import java.io.IOException;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
  
public class Sepia
{
     public static void main(String args[]) throws IOException
     {
         BufferedImage img = null ;
         File f = null ;
  
         //read image
         try
         {
             f = new File( "G:\\Inp.jpg" );
             img = ImageIO.read(f);
         }
         catch (IOException e)
         {
             System.out.println(e);
         }
  
         //get width and height of the image
         int width = img.getWidth();
         int height = img.getHeight();
  
         //convert to sepia
         for ( int y = 0 ; y <height; y++)
         {
             for ( int x = 0 ; x <width; x++)
             {
                 int p = img.getRGB(x, y);
  
                 int a = (p>> 24 )& 0xff ;
                 int R = (p>> 16 )& 0xff ;
                 int G = (p>> 8 )& 0xff ;
                 int B = p& 0xff ;
  
                 //calculate newRed, newGreen, newBlue
                 int newRed = ( int )( 0.393 *R + 0.769 *G + 0.189 *B);
                 int newGreen = ( int )( 0.349 *R + 0.686 *G + 0.168 *B);
                 int newBlue = ( int )( 0.272 *R + 0.534 *G + 0.131 *B);
  
                 //check condition
                 if (newRed> 255 )
                     R = 255 ;
                 else
                     R = newRed;
  
                 if (newGreen> 255 )
                     G = 255 ;
                 else
                     G = newGreen;
  
                 if (newBlue> 255 )
                     B = 255 ;
                 else
                     B = newBlue;
  
                 //set new RGB value
                 p = (a<<24 ) | (R<<16 ) | (G<<8 ) | B;
  
                 img.setRGB(x, y, p);
             }
         }
  
         //write image
         try
         {
             f = new File( "G:\\Out.jpg" );
             ImageIO.write(img, "jpg" , f);
         }
         catch (IOException e)
         {
             System.out.println(e);
         }
     }
}

注意注意:此代码无法在在线IDE上运行, 因为它需要磁盘上的映像。

输出如下:

Inp.jpg


Out.jpg

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

赞(0) 打赏
未经允许不得转载:srcmini » Java中的图像处理S6(将彩色图像转换为棕褐色图像)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏