Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将图片与白色混合_Java_Colors_Blending - Fatal编程技术网

Java 将图片与白色混合

Java 将图片与白色混合,java,colors,blending,Java,Colors,Blending,嗨,我有一个项目,我需要混合白色和黑色的图片。我有黑代码,但我似乎无法让白代码工作。有人能告诉我我做错了什么吗,我之前让白色的工作了很短时间,但它消失了,我真的不知道如何。。。非常感谢。底部有一个图片结果链接 import java.awt.Color; public class BlendingWithBlackAndWhite { public static void main(String[] args) { FileChooser.pickMediaPath(); Blendabl

嗨,我有一个项目,我需要混合白色和黑色的图片。我有黑代码,但我似乎无法让白代码工作。有人能告诉我我做错了什么吗,我之前让白色的工作了很短时间,但它消失了,我真的不知道如何。。。非常感谢。底部有一个图片结果链接

import java.awt.Color;
public class BlendingWithBlackAndWhite 
{
 public static void main(String[] args)

{
FileChooser.pickMediaPath();
BlendablePic pRef = new BlendablePic(FileChooser.pickAFile());
double a[]= new double[3];
a[0]=0.1;
a[1]=0.3;
a[2]=0.5;
pRef.blendRectWithWhite(0, 920, 920, 920, a[0]+0.9);
pRef.blendRectWithWhite(920, 920, 920, 1840, a[2]);
pRef.blendRectWithWhite(1840, 920, 920, 2760, a[1]-0.3);
pRef.blendRectWithBlack(0,0, 920, 920, a[1]);
pRef.blendRectWithBlack(920,0, 1784, 920, a[0]);
pRef.blendRectWithBlack(1785,0, 2600, 920, a[2]*-0.2);
pRef.explore();
}}

public class BlendablePic extends Picture{
public BlendablePic(String filename){
super(filename);
 }
 public void blendRectWithWhite(int xMin, int yMin, int xMax, int yMax, double a)
  {
int x;
x = xMin;
while (x<= xMax)
{
  int y;
  y = yMin;
  while(y <= yMax)
  {
    Pixel refPix = this.getPixel(x,y);
    refPix.setRed((int)Math.round(refPix.getRed() * (1.0-a)+255*a));
    refPix.setGreen((int)Math.round(refPix.getGreen() * (1.0-a)+200*a));
    refPix.setBlue((int)Math.round(refPix.getBlue() * (1.0-a)+255*a));
  y= y+1;
  }
  x = x+1;
}
}
public void blendRectWithBlack(int xMin, int yMin, int xMax, int yMax, double a)
{
int x;
x = xMin;
while (x<= xMax)
{
  int y;
  y = yMin;
  while(y <= yMax)
  {
    Pixel refPix = this.getPixel(x,y);
    refPix.setRed((int)Math.round(refPix.getRed() * (0.2 +a)+0*a));
    refPix.setGreen((int)Math.round(refPix.getGreen() * (0.2 +a)+0*a));
    refPix.setBlue((int)Math.round(refPix.getBlue() * (0.2 +a)+0*a));

  y = y+1;
}
x = x+1;
 }
 }}
导入java.awt.Color;
黑白混搭的公共课
{
公共静态void main(字符串[]args)
{
FileChooser.pickMediaPath();
BlendablePic pRef=新的BlendablePic(FileChooser.pickAFile());
双a[]=新双[3];
a[0]=0.1;
a[1]=0.3;
a[2]=0.5;
与白色混合的预混合(0,920,920,920,a[0]+0.9);
pRef.blendRectWithWhite(9209209201840,a[2]);
预混白色(1840920902760,a[1]-0.3);
pRef.blendrect与黑色(0,0920920,a[1]);
pRef.blendrect与黑色(920,01784920,a[0]);
预混黑色(1785,02600920,a[2]*-0.2);
pRef.explore();
}}
公共类BlendablePic扩展图片{
公共BlendablePic(字符串文件名){
超级(文件名);
}
与白色混合的公共空隙(int xMin、int yMin、int xMax、int yMax、双a)
{
int x;
x=xMin;

当(x只看图片时,你必须已经有了混合的算法,当混合到白色时,你实际上没有做任何事情。这意味着方法应该几乎完全相同,一个是“添加”颜色,另一个是“减去”当我看你的方法时,我发现这基本上是正确的,但是你改变了第二个加数

(1.0-a)+255*a
(1.0-a)+200*a
(1.0-a)+255*a


(0.2 +a)+0*a
(0.2 +a)+0*a
(0.2 +a)+0*a

当你乘以0*a,你得到0,所以你的混合正好是0.2+a。我怀疑你的问题在这里…

@smk没有错误,我会尝试找到一种链接到图片的方法,等等。@smk更好吗?我找到了!我所有的编码都是正确的,除了我在图片上画了一条线而不是一个框,所以我看不到它!