Processing 返回值介于0和255之间,表示指定位置的图像阴影
我有一个单色(黑白)图像,我试图提取一个介于0和255之间的值,表示像素的阴影,0表示黑色,255表示白色。我按如下方式导入图像:Processing 返回值介于0和255之间,表示指定位置的图像阴影,processing,Processing,我有一个单色(黑白)图像,我试图提取一个介于0和255之间的值,表示像素的阴影,0表示黑色,255表示白色。我按如下方式导入图像: PImage img; void setup() { size(1000, 1000); img = loadImage("myimage.jpg"); x_location = 50; y_location = 230; // add code to extract shade from img here } 我正在尝试
PImage img;
void setup() {
size(1000, 1000);
img = loadImage("myimage.jpg");
x_location = 50;
y_location = 230;
// add code to extract shade from img here
}
我正在尝试使用
get()
提取阴影。不幸的是,当我尝试使用img.get(x\u位置,y\u位置)
时,它返回一个非常大的负数(大约为-1000000)。有没有办法确保get()
返回一些规范化(可理解)的值?这很有趣。以下是一些帮助您获得所需内容的基本代码:
PImage img;
color currentColor;
void setup() {
size(656, 354);
currentColor = color(0);
img = loadImage("bean.jpeg");
}
void draw() {
background(0);
image(img, 0, 0);
fill(currentColor);
stroke(200);
strokeWeight(2);
ellipse(30, 30, 40, 40);
fill(0);
text("A " + alpha(currentColor), 10, 65);
text("R " + red(currentColor), 10, 75);
text("G " + green(currentColor), 10, 85);
text("B " + blue(currentColor), 10, 95);
}
void mouseClicked() {
currentColor = img.get(mouseX, mouseY);
}
看起来是这样的:
这里的神奇之处在于,您可以提取颜色中的ARGB信息。然而,我也想知道为什么它是一个负数。(我的重点):
在处理过程中,颜色实际上存储在简单的Java Int中,32位
价值观颜色伪类型实际上被处理替换为
编译前生成Java代码时使用int
此类型的宽度为32位,这是完美的,因为我们可以将其设置为4位
每个通道内部有8位。8位允许从
0到255(包括在内)。4个通道分别为alpha(不透明度)、红色、绿色、,
蓝色,通常缩写为ARGB
颜色通道的低值表示“低强度”,即黑暗。高价值
表示“高强度”,即亮度。所以如果所有通道都是0,我们就有
黑色如果他们都是255,我们有白色的。阿尔法通道是
不同:0表示低不透明度,完全透明,而255表示
高不透明度,正常不透明颜色
在Java中,数字总是有符号的。在计算中,负数是
通过将最高位设置为1来标记所以,不透明的颜色,最
公共种类,如果未提供不透明度,则默认为0xFF=255
高位设置为1,颜色值为负值。因此答案为
第一个问题
奇怪的值是将
通道。< /强>让我们采取一个简单的黄色颜色。Alpha为255(不透明),
红色是250,绿色是230,蓝色是20。这些值是0xFF,
0xFA、0xE6和0x14。结合起来生成一个int,它给出0xFFFAE614,即。
-因此是一个奇怪的数字,不容易破译
如果你的图像真的是灰度的,你可以使用RGB信息的任何部分。玩得开心 这里有一些代码来了解如何处理颜色参数。我希望这能帮助你
void setup() {
colorMode(RGB,255,255,255,255);
println("colorMode",g.colorModeX,g.colorModeY,g.colorModeZ,g.colorModeA);
background(random(g.colorModeX),random(g.colorModeY),random(g.colorModeZ),random(g.colorModeA));
int color_arg = get((int)random(width),(int)random(height));
println("color_arg: ",color_arg);
println("color_arg rgb_a:",red(color_arg),green(color_arg),blue(color_arg),alpha(color_arg));
println("color_arg hsb_a:",hue(color_arg),saturation(color_arg),brightness(color_arg),alpha(color_arg));
}
我猜你在用(你没说)。文档中说“返回的数字是根据当前的颜色范围进行缩放的”。这可能是问题所在吗?是的,我想是皮梅奇3号。我想这可能就是问题所在;问题是我不知道当前的颜色范围是什么,也不知道如何检索它们。了解这些信息会很有用,因为这样我就可以自己规范化输出了。有什么想法吗?