我有一个带有透明度的PNG文件,它被加载并存储在一个BufferedImage.我需要这BufferedImage是的TYPE_INT_ARGB.但是,当我使用getType()返回值时,0(TYPE_CUSTOM)而不是2(TYPE_INT_ARGB).
这是我加载的方式.png:
public File img = new File("imagen.png");
public BufferedImage buffImg =
new BufferedImage(240, 240, BufferedImage.TYPE_INT_ARGB);
try {
buffImg = ImageIO.read(img );
}
catch (IOException e) { }
System.out.Println(buffImg.getType()); //Prints 0 instead of 2
Run Code Online (Sandbox Code Playgroud)
如何加载.png,保存BufferedImage并制作TYPE_INT_ARGB?
如何计算RGBA色彩空间中两种颜色之间的相似度?(当然背景颜色未知)
我需要通过为图像中的每个像素找到最佳调色板条目,将RGBA图像重新映射到RGBA颜色的调色板.
在RGB颜色空间中,可以假设最相似的颜色是具有最小欧氏距离的颜色.然而,这种方法不RGBA,例如工作,从欧氏距离rgba(0,0,0,0),以rgba(0,0,0,50%)比较小rgba(100%,100%,100%,1%),但后者看起来要好得多.
我正在使用预乘的RGBA色彩空间:
r = r×a
g = g×a
b = b×a
Run Code Online (Sandbox Code Playgroud)
我尝试过这个公式(编辑: 请参阅下面的答案以获得更好的公式):
?r² + ?g² + ?b² + 3 × ?a²
Run Code Online (Sandbox Code Playgroud)
但它看起来不是最佳的 - 在具有半透明渐变的图像中,它会找到错误的颜色,导致不连续/锐边.不透明颜色和alpha之间的线性比例看似腥.
什么是最佳配方?
*)为了简化这个问题,我忽略了误差扩散,伽玛和心理视觉色彩空间.
略有关联:如果你想在这个非Euclidean RGBA空间中找到最接近的颜色,vp-tree是最好的.
为什么这个ARGB十六进制不起作用?
<td style="background-color: #FFFF9980">
Run Code Online (Sandbox Code Playgroud) 谁能解释一下java如何在TYPE_INT_RGB和TYPE_INT_ARGB中存储颜色?
这些代码行是否适用于计算红色,绿色和蓝色?
int red= (RGB>>16)&255;
int green= (RGB>>8)&255;
int blue= (RGB)&255;
Run Code Online (Sandbox Code Playgroud)
那么TYPE_INT_ARGB呢?如何从TYPE_INT_ARGB获得红色,绿色和蓝色?
我已经声明它们超越了在CSS中使用标准色orange,blue,aquamarine,等等,并一直在使用rgb()像这样对于相同的颜色分别为rgb(255,165,0),rgb(0,0,255)和rgb(127,255,212)(感谢ColorHighlighter包ST3).
在改变了bootstrap的渐变时,.btn我遇到了rgba().快速研究解释说,a代表alpha,和那里有完整的数学一大堆归因于 卡特莫尔和史密斯.也很容易发现alpha通道用于"alpha合成",其主要可以被关联为"不透明度".
color: salmon:.5;)我目前正在使用类似的东西:TextView.SetBackgroundColor(Color.WHITE);在我的java代码中.我希望能够通过java为textview添加一些透明度......这很容易通过#AARRGGBB格式在XML中完成,但我还没有找到一种方法来以编程方式完成此操作.
System.Drawing.Color有一个ToArgb()方法来返回颜色的Int表示.
在Silverlight中,我认为我们必须使用System.Windows.Media.Color.它有A,R,G,B成员,但没有返回单个值的方法.
我该如何实现ToArgb()?在System.Drawing.Color中,ToArgb()由
return (int) this.Value;
Run Code Online (Sandbox Code Playgroud)
System.Windows.Media.Color有一个FromArgb(字节A,字节R,字节G,字节B)方法.如何分解ToArgb()返回的Int以与FromArgb()一起使用?
谢谢你的任何指示......
我对C#很陌生并试图做一个基本的图像处理软件.我理解这个片段从WriteableBitmap像素"当前"的ARGB int值中提取A,R,G,B
for(int i = 0; i < bitmapArray.Length; i++) {
var current = bitmapArray[i];
var alpha = (byte)(current >> 24);
var red = (byte)(current >> 16);
var green = (byte)(current >> 8);
var blue = (byte)(current);
//Some code
}
Run Code Online (Sandbox Code Playgroud)
什么是">>"来转换价值?
另外,如果我单独对r,g和b进行一些计算,如何将它们转换回整数ARGB值以用新的像素替换原始像素?
提前致谢.
编辑:谢谢你们,现在有道理.
我有两个函数,一个是从给定的Integer返回RGB值,另一个函数反向,为它提供RGB值,它返回一个Integer.我通过查看转换为RGB的整数是否从RGB转回原始整数值来测试这个,但我得到的值不同.
def getRGBfromI(RGBint):
blue = RGBint & 255
green = (RGBint >> 8) & 255
red = (RGBint >> 16) & 255
return red, green, blue
def getIfromRGB(rgb):
red = rgb[0]
green = rgb[1]
blue = rgb[2]
print red, green, blue
RGBint = (red<<16) + (green<<8) + blue
return RGBint
Run Code Online (Sandbox Code Playgroud)
考试:
i1 = 2147483647
colr1 = getRGBfromI(i1)
print colr1 # returns (255,255,255)
i2 =getIfromRGB(colr1)
print i1, i2 # returns 2147483647 16777215
Run Code Online (Sandbox Code Playgroud)
对我来说,似乎getRGBfromI()是正确的,getIfromRGB()是不正确的,但我也可能是错的.