Java 调整图像';对比度

Java 调整图像';对比度,java,math,image-processing,Java,Math,Image Processing,我试图将对比度应用于图像,但我找不到一个好的公式来做这件事。我尝试过许多不同的网站公式,但都没有成功。有人有什么建议吗 以下是我的最新尝试: int r = Colors.red(pixel); int g = Colors.green(pixel); int b = Colors.blue(pixel); float red = r / 255.0f; float green = g / 255.0f; float blue = b / 255.0f; red = (((red - 0.5

我试图将对比度应用于图像,但我找不到一个好的公式来做这件事。我尝试过许多不同的网站公式,但都没有成功。有人有什么建议吗

以下是我的最新尝试:

int r = Colors.red(pixel);
int g = Colors.green(pixel);
int b = Colors.blue(pixel);

float red = r / 255.0f;
float green = g / 255.0f;
float blue = b / 255.0f;

red = (((red - 0.5f) * amount) + 0.5f) * 255.0f;
green = (((green - 0.5f) * amount) + 0.5f) * 255.0f;
blue = (((blue - 0.5f) * amount) + 0.5f) * 255.0f;

int iR = (int)red;
iR = iR > 255 ? 255 : iR;
iR = iR < 0 ? 0 : iR;
int iG = (int)green;
iG = iG > 255 ? 255 : iG;
iG = iG < 0 ? 0 : iG;
int iB = (int)blue;
iB = iB > 255 ? 255 : iB;
iB = iB < 0 ? 0 : iB;
intr=Colors.red(像素);
int g=颜色。绿色(像素);
INTB=颜色。蓝色(像素);
浮动红=r/255.0f;
绿色浮动=g/255.0f;
蓝色浮动=b/255.0f;
红色=((红色-0.5f)*金额)+0.5f)*255.0f;
绿色=((绿色-0.5f)*金额)+0.5f)*255.0f;
蓝色=((蓝色-0.5f)*金额)+0.5f)*255.0f;
int-iR=(int)红色;
iR=iR>255?255:iR;
iR=iR<0?0:iR;
int-iG=(int)绿色;
iG=iG>255?255:iG;
iG=iG<0?0:iG;
int-iB=(int)蓝色;
iB=iB>255?255:iB;
iB=iB<0?0:iB;

那没用。有人有其他建议吗?

我想出来了!下面是所有想要获得相同效果的人的完整代码

float value = (255.0f + amount) / 255.0f;
value *= value;
for(int i = 0; i < ImageSync.previewPixels.length; i++){
    int pixel = ImageSync.previewPixels[i];
    int r = Colors.red(pixel);
    int g = Colors.green(pixel);
    int b = Colors.blue(pixel);

    float red = r / 255.0f;
    float green = g / 255.0f;
    float blue = b / 255.0f;

    red = (((red - 0.5f) * value) + 0.5f) * 255.0f;
    green = (((green - 0.5f) * value) + 0.5f) * 255.0f;
    blue = (((blue - 0.5f) * value) + 0.5f) * 255.0f;

    int iR = (int)red;
    iR = iR > 255 ? 255 : iR;
    iR = iR < 0 ? 0 : iR;
    int iG = (int)green;
    iG = iG > 255 ? 255 : iG;
    iG = iG < 0 ? 0 : iG;
    int iB = (int)blue;
    iB = iB > 255 ? 255 : iB;
    iB = iB < 0 ? 0 : iB;

    ImageSync.previewPixels[i] = Colors.rgba(iR, iG, iB);
}
float value=(255.0f+金额)/255.0f;
价值*=价值;
对于(int i=0;i255?255:iR;
iR=iR<0?0:iR;
int-iG=(int)绿色;
iG=iG>255?255:iG;
iG=iG<0?0:iG;
int-iB=(int)蓝色;
iB=iB>255?255:iB;
iB=iB<0?0:iB;
ImageSync.previewPixels[i]=Colors.rgba(iR、iG、iB);
}

我想出来了!下面是所有想要获得相同效果的人的完整代码

float value = (255.0f + amount) / 255.0f;
value *= value;
for(int i = 0; i < ImageSync.previewPixels.length; i++){
    int pixel = ImageSync.previewPixels[i];
    int r = Colors.red(pixel);
    int g = Colors.green(pixel);
    int b = Colors.blue(pixel);

    float red = r / 255.0f;
    float green = g / 255.0f;
    float blue = b / 255.0f;

    red = (((red - 0.5f) * value) + 0.5f) * 255.0f;
    green = (((green - 0.5f) * value) + 0.5f) * 255.0f;
    blue = (((blue - 0.5f) * value) + 0.5f) * 255.0f;

    int iR = (int)red;
    iR = iR > 255 ? 255 : iR;
    iR = iR < 0 ? 0 : iR;
    int iG = (int)green;
    iG = iG > 255 ? 255 : iG;
    iG = iG < 0 ? 0 : iG;
    int iB = (int)blue;
    iB = iB > 255 ? 255 : iB;
    iB = iB < 0 ? 0 : iB;

    ImageSync.previewPixels[i] = Colors.rgba(iR, iG, iB);
}
float value=(255.0f+金额)/255.0f;
价值*=价值;
对于(int i=0;i255?255:iR;
iR=iR<0?0:iR;
int-iG=(int)绿色;
iG=iG>255?255:iG;
iG=iG<0?0:iG;
int-iB=(int)蓝色;
iB=iB>255?255:iB;
iB=iB<0?0:iB;
ImageSync.previewPixels[i]=Colors.rgba(iR、iG、iB);
}

如果
amount
大于1,则应确实增加对比度。什么不管用?啊,是的!您的权利,我只是忘记添加
float value=(100.0f+金额)/100.0f;价值*=价值在它之前。此外,负数也不能很好地工作。如果
amount
大于1,则应确实增加对比度。什么不管用?啊,是的!您的权利,我只是忘记添加
float value=(100.0f+金额)/100.0f;价值*=价值在它之前。此外,负数也不能很好地工作。