⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imageeffect.java

📁 利用Java寫的智慧盤拼圖遊戲(Applet型式)。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            
      WritableRaster raster = resultImage.getRaster();
      int sx, sy;
      // 
      int w = blkW * imgCol;
      int h = blkH * imgRow; 
     
      for (int row=0; row<h; row+=blkH)
      { 
        for (int col=0; col<w; col+=blkW)
           { sx = col;
             sy = row;
             for (int y=0; y<depth; ++y) // top
             { 	 for (int x=y; x<blkW-y; ++x)
            	 {  
                    raster.setSample(sx+x, sy+y, 0, light);  // get the red value
                    raster.setSample(sx+x, sy+y, 1, light);
                    raster.setSample(sx+x, sy+y, 2, light);  
            	 }
             }
             for (int x=0; x<depth; ++x) // left
             { 	 for (int y=x; y<blkH-x; ++y)
            	 {  raster.setSample(sx+x, sy+y, 0, light);  // get the red value
                    raster.setSample(sx+x, sy+y, 1, light);
                    raster.setSample(sx+x, sy+y, 2, light);  
            	 }
             }
             sx += blkW-1;
             sy += blkH-1;
             for (int y=0; y<depth; ++y) // bottom
             { 	 for (int x=y; x<blkW-y; ++x)
            	 {  
                    raster.setSample(sx-x, sy-y, 0, dark);  // get the red value
                    raster.setSample(sx-x, sy-y, 1, dark);
                    raster.setSample(sx-x, sy-y, 2, dark);            		 
            	 }
             }
             for (int x=0; x<depth; ++x) // right
             { 	 for (int y=x; y<blkH-x; ++y)
            	 {  
            	    raster.setSample(sx-x, sy-y, 0, dark);  // get the red value
                    raster.setSample(sx-x, sy-y, 1, dark);
                    raster.setSample(sx-x, sy-y, 2, dark); ;
               	 }
             }
          }
      }
            
      return (resultImage);   
    }
    public static BufferedImage buttonize(Image image, int imgRow, int imgCol, int depth,
    		                              Color light, Color dark 
                                         )
    { int blkW, blkH;
      int imgW, imgH;
      
      int lightR, lightG, lightB, darkR, darkG, darkB;
      lightR = light.getRed();  lightG = light.getGreen();  lightB = light.getBlue();
      darkR = dark.getRed();  darkG = dark.getGreen();  darkB = dark.getBlue();
            
      BufferedImage resultImage;
      
      imgW = image.getWidth(null);
      imgH = image.getHeight(null);
     
      resultImage = new BufferedImage(imgW, imgH, BufferedImage.TYPE_INT_ARGB); // 32-bits color image
      Graphics2D g2d = (Graphics2D) resultImage.createGraphics();
      g2d.drawImage(image, 0,0, null);
      g2d.dispose();  // release g2d
      
      blkW = imgW / imgCol;
      blkH = imgH / imgRow;
            
      WritableRaster raster = resultImage.getRaster();
      int sx, sy;
      // 
      int w = blkW * imgCol;
      int h = blkH * imgRow; 
     
      for (int row=0; row<h; row+=blkH)
      { 
        for (int col=0; col<w; col+=blkW)
           { sx = col;
             sy = row;
             for (int y=0; y<depth; ++y) // top
             { 	 for (int x=y; x<blkW-y; ++x)
            	 {  
                    raster.setSample(sx+x, sy+y, 0, lightR);  // get the red value
                    raster.setSample(sx+x, sy+y, 1, lightG);
                    raster.setSample(sx+x, sy+y, 2, lightB);  
            	 }
             }
             for (int x=0; x<depth; ++x) // left
             { 	 for (int y=x; y<blkH-x; ++y)
            	 {  raster.setSample(sx+x, sy+y, 0, lightR);  // get the red value
                    raster.setSample(sx+x, sy+y, 1, lightG);
                    raster.setSample(sx+x, sy+y, 2, lightB);  
            	 }
             }
             sx += blkW-1;
             sy += blkH-1;
             for (int y=0; y<depth; ++y) // bottom
             { 	 for (int x=y; x<blkW-y; ++x)
            	 {  
                    raster.setSample(sx-x, sy-y, 0, darkR);  // get the red value
                    raster.setSample(sx-x, sy-y, 1, darkG);
                    raster.setSample(sx-x, sy-y, 2, darkB);            		 
            	 }
             }
             for (int x=0; x<depth; ++x) // right
             { 	 for (int y=x; y<blkH-x; ++y)
            	 {  
            	    raster.setSample(sx-x, sy-y, 0, darkR);  // get the red value
                    raster.setSample(sx-x, sy-y, 1, darkG);
                    raster.setSample(sx-x, sy-y, 2, darkB); ;
               	 }
             }
          }
      }
            
      return (resultImage);   
    }
    public static Image shrinkImage(Image image, int skipX, int skipY)
    { int imgW, imgH, sW, sH, index, imgIndex;
      
      BufferedImage resultImage;
      
      imgW = image.getWidth(null);
      imgH = image.getHeight(null);
      sW = imgW / skipX;
      sH = imgH / skipY;
      if ( imgW % skipX != 0 ) ++sW;
      if ( imgH % skipY != 0 ) ++sH;
      
      resultImage = new BufferedImage(sW, sH, BufferedImage.TYPE_INT_ARGB); // 32-bits color image
      Graphics2D g2d = (Graphics2D) resultImage.createGraphics();
      g2d.drawImage(image, 0, 0,   sW,  sH,
    		               0, 0, imgW, imgH,
    		        null
    		       );
       
      g2d.dispose();  // release g2d
           
      return (resultImage);  
    }
    public static BufferedImage toBinary(Image img, int threshold)
    { int imgW, imgH, r, g, b, index, value;
      int err;  
      int[] binary;
      BufferedImage bufImage; //
      
      imgW = img.getWidth(null);
      imgH = img.getHeight(null);
      bufImage = new BufferedImage(imgW, imgH, BufferedImage.TYPE_INT_ARGB); // 32-bits color image
      Graphics2D g2d = (Graphics2D) bufImage.createGraphics();
      g2d.drawImage(img, 0,0, null);
      g2d.dispose();  // release g2d
           
      binary = new int[imgH*imgW];
      bufImage.getRGB(0, 0, imgW, imgH, binary, 0, imgW);
      
      for (int k=0; k<binary.length; ++k)
         { r = (binary[k]>>16) & 0xff;
           g = (binary[k]>> 8) & 0xff;
           b = binary[k] & 0xff;
           value = (int)( r*0.299 + g*0.287 + b*0.114 );
           if ( value >= threshold )
             { 
               binary[k] = 0xFFFFFFFF;
             }
           else
             { 
               binary[k] = 0xFF000000;
             }                
         }
      bufImage.setRGB(0, 0, imgW, imgH, binary, 0, imgW);
      return (bufImage);  
    }
    public static BufferedImage toDotImage(Image img, int threshold)
    { int imgW, imgH, index;
      double err, r, g, b, value;
      double[] gray;
      int[] binary;
      BufferedImage bufImage; //
      
      imgW = img.getWidth(null);
      imgH = img.getHeight(null);
      bufImage = new BufferedImage(imgW, imgH, BufferedImage.TYPE_INT_ARGB); // 32-bits color image
      Graphics2D g2d = (Graphics2D) bufImage.createGraphics();
      g2d.drawImage(img, 0,0, null);
      g2d.dispose();  // release g2d
           
      binary = new int[imgH*imgW];
      bufImage.getRGB(0, 0, imgW, imgH, binary, 0, imgW);
      
      gray = new double[imgH*imgW];
      for (int k=0; k<gray.length; ++k)
      {	  r = (binary[k]>>16) & 0xff;
          g = (binary[k]>> 8) & 0xff;
          b = binary[k] & 0xff;
          gray[k] = r*0.299 + g*0.587 + b*0.114;
      }
      for (int row=1; row<imgH-1; ++row)
         { index = row*imgW + 1;
           for (int col=1; col<imgW-1; ++col)
              { 
                if ( gray[index] >= threshold )
                  { err = gray[index] - threshold;
                    binary[index] = 0xFFFFFFFF;
                  }
                else
                  { err = gray[index];
                    binary[index] = 0xFF000000;
                  }  
                gray[index+1     ] += (int)(err*7./16.);  // to the right
                gray[index+imgW-1] += (int)(err*3./16.);  // left of next line 
                gray[index+imgW  ] += (int)(err*5./16.);  // next line
                gray[index+imgW+1] += (int)(err/16.);    // right of next line
                ++index;
              }
         }
      index = imgW*(imgH-1);
      for (int k=0; k<imgW; ++k)
      { if ( gray[k]>=threshold ) binary[k] = 0xFFFFFFFF;
        else binary[k] = 0xFF000000;
        if ( gray[index+k]>=threshold ) binary[index+k] = 0xFFFFFFFF;
        else binary[index+k] = 0xFF000000;
      }
      index = 0;
      for (int k=0; k<imgH; ++k)
      {  if ( gray[index]>=threshold ) binary[index] = 0xFFFFFFFF;
         else binary[index] = 0xFF000000;
         if ( gray[index+imgW-1]>=threshold ) binary[index+imgW-1] = 0xFFFFFFFF;
         else binary[index+imgW-1] = 0xFF000000;
    	 index += imgW; 
      }
      bufImage.setRGB(0, 0, imgW, imgH, binary, 0, imgW);
      return (bufImage);  
    }
    public static BufferedImage grayFiltering(Image img, int[] filter, int total)
    { int imgW, imgH, r, g, b, index, value;
      int prev, next;  
      int[] gray, result;
      
      BufferedImage bufImage, bufImg; //
      imgW = img.getWidth(null);
      imgH = img.getHeight(null);
      bufImage = new BufferedImage(imgW, imgH, BufferedImage.TYPE_INT_ARGB); // 32-bits color image
      Graphics2D g2d = (Graphics2D) bufImage.createGraphics();
      g2d.drawImage(img, 0,0, null);
      g2d.dispose();  // release g2d
      // another new BufferedImage bufImg for showing result
      gray   = new int[imgH*imgW];
      result = new int[imgH*imgW];
      
      bufImage.getRGB(0, 0, imgW, imgH, gray, 0, imgW);
      
      index = 0;
      for (int row=0; row<imgH; ++row)
         { for (int col=0; col<imgW; ++col)
              { r = (gray[index]>>16) & 0xff;
                g = (gray[index]>> 8) & 0xff;
                b = gray[index] & 0xff;
                gray[index] = (int)(0.299*r + 0.587*g + 0.114*b);
                ++index;
              }
         }           
     
      if ( total==0 ) total = 1;
     
      for (int row=1; row<imgH-1; ++row)
         { index = row*imgW + 1;
           for (int col=1; col<imgW-1; ++col)
              { prev = index-imgW;
                next = index+imgW;
                value = gray[prev -1] * filter[0] +
                        gray[prev   ] * filter[1] + 
                        gray[prev +1] * filter[2] + 
                        gray[index-1] * filter[3] + 
                        gray[index  ] * filter[4] + 
                        gray[index+1] * filter[5] +
                        gray[next -1] * filter[6] +
                        gray[next   ] * filter[7] +
                        gray[next +1] * filter[8]   ;
                value = (value/total);
                if ( value > 255 )  value = 255;
                else if ( value<0 ) value = 0;         
                result[index] = 0xFF000000 + (value<<16) + (value<<8) + value;                
                ++index;
              }
         }
      bufImage.setRGB(0, 0, imgW, imgH, result, 0, imgW);
      
      return (bufImage);  
    }
    public static Image colorFiltering(Image img, int[] filter, int total)
    { int imgW, imgH, r, g, b, index, valueR, valueG, valueB;
      int prev, next;  
      int[] gray, result;
      
      BufferedImage bufImage, bufImg; //
      imgW = img.getWidth(null);
      imgH = img.getHeight(null);
      bufImage = new BufferedImage(imgW, imgH, BufferedImage.TYPE_INT_ARGB); // 32-bits color image
      Graphics2D g2d = (Graphics2D) bufImage.createGraphics();
      g2d.drawImage(img, 0,0, null);
      g2d.dispose();  // release g2d
      // another new BufferedImage bufImg for showing result
      gray   = new int[imgH*imgW];
      result = new int[imgH*imgW];
      
      bufImage.getRGB(0, 0, imgW, imgH, gray, 0, imgW);
            
      if ( total==0 ) total = 1;
      
      for (int row=1; row<imgH-1; ++row)
         { index = row*imgW + 1;
           for (int col=1; col<imgW-1; ++col)
              { prev = index-imgW;
                next = index+imgW;
                valueR = ((gray[prev -1]>>16) & 0xFF) * filter[0] +
                         ((gray[prev   ]>>16) & 0xFF) * filter[1] + 
                         ((gray[prev +1]>>16) & 0xFF) * filter[2] + 
                         ((gray[index-1]>>16) & 0xFF) * filter[3] + 
                         ((gray[index  ]>>16) & 0xFF) * filter[4] + 
                         ((gray[index+1]>>16) & 0xFF) * filter[5] +
                         ((gray[next -1]>>16) & 0xFF) * filter[6] +
                         ((gray[next   ]>>16) & 0xFF) * filter[7] +
                         ((gray[next +1]>>16) & 0xFF) * filter[8]   ;
                valueG = ((gray[prev -1]>> 8) & 0xFF) * filter[0] + 
                         ((gray[prev   ]>> 8) & 0xFF) * filter[1] + 
                         ((gray[prev +1]>> 8) & 0xFF) * filter[2] + 
                         ((gray[index-1]>> 8) & 0xFF) * filter[3] + 
                         ((gray[index  ]>> 8) & 0xFF) * filter[4] + 
                         ((gray[index+1]>> 8) & 0xFF) * filter[5] +
                         ((gray[next -1]>> 8) & 0xFF) * filter[6] +
                         ((gray[next   ]>> 8) & 0xFF) * filter[7] +
                         ((gray[next +1]>> 8) & 0xFF) * filter[8]   ; 
                valueB = (gray[prev -1] & 0xFF) * filter[0] + 
                         (gray[prev   ] & 0xFF) * filter[1] + 
                         (gray[prev +1] & 0xFF) * filter[2] + 
                         (gray[index-1] & 0xFF) * filter[3] + 
                         (gray[index  ] & 0xFF) * filter[4] + 
                         (gray[index+1] & 0xFF) * filter[5] +
                         (gray[next -1] & 0xFF) * filter[6] +
                         (gray[next   ] & 0xFF) * filter[7] +
                         (gray[next +1] & 0xFF) * filter[8]   ;                   
                valueR = (valueR/total);
                if ( valueR > 255 )  valueR = 255;
                else if ( valueR<0 ) valueR = 0; 
                valueG = (valueG/total);
                if ( valueG > 255 )  valueG = 255;
                else if ( valueG<0 ) valueG = 0;  
                valueB = (valueB/total);
                if ( valueB > 255 )  valueB = 255;
                else if ( valueB<0 ) valueB = 0;          
                result[index] = 0xFF000000 + (valueR<<16) + (valueG<<8) + valueB;                
                ++index;
              }
         }
      bufImage.setRGB(0, 0, imgW, imgH, result, 0, imgW);
      
      return (bufImage);  
    }      
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -