我在网上发现了很多关于使用ImageMagick的命令行函数来创建随机噪声图像的文档,但是还没有弄清楚如何在Magick ++中重现它。
ImageMagick有+噪音方法Random:
convert -size 100x100 xc: +noise Random random.png
我希望能够将像素设置为Color(“random”),例如:
sought.extent(Geometry(640,416), Color("random"), CenterGravity);
在随机噪音的画布中嵌入较小的图像。当然,随机不是Color的可接受的论据,但我想知道是否存在等价物?理想情况是,如果还可以限制颜色范围 - 例如只有12位(#000-#FFF)。
答案 0 :(得分:5)
方法import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
public abstract class BaseActivity extends AppCompatActivity {
public Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutResource());
toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
getSupportActionBar().setTitle(BaseActivity.this.getResources().getString(R.string.app_name));
//getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}
protected abstract int getLayoutResource();
protected void setActionBarIcon(int iconRes) {
toolbar.setNavigationIcon(iconRes);
}
}
是一个很好的起点,但如果你真的想要随机/随机。使用Theme.AppCompat.Light.NoActionBar
。
Magick::Image::addNoise()
由Mark Setchell编辑
就像我不喜欢编辑其他人的帖子一样,我想添加一些对于评论来说太大而不是竞争性答案的东西,所以这是我所知道的唯一方式。请随意忽略/删除/分离这部分!
如果OP想要对应于12位值的数字,我在命令行做了一个小实验,看看我怎么强迫它:
-fx "rand()"
生成一个1000像素的图像并强制输出为未压缩的PGM文件,您可以看到其中的值。然后对它们进行排序以查看生成的最大值是什么,它是4096.所以,我认为我建议的#include <Magick++.h>
int main(int argc, const char ** argv) {
Magick::InitializeMagick(*argv);
Magick::Image image("100x100", "gray50");
image.fx("rand()");
image.write("noise.jpg");
return 0;
}
表达式(convert -size 10000x1 xc:gray -fx "(rand*4096)/quantumrange" -depth 16 -compress none pgm:- | sed '1,3d' | tr " " "\n" | sort -n
)可能有助于生成12位值。
其他更新
对于使用随机颜色映射区域,FX表达式可能看起来像......
-fx
(rand*4096)/quantumrange
&amp; (i<100 & j<480) ? rand() : u
或x / y偏移,i
是原始图像。一个有趣的选项,但遍历所有像素将是缓慢的。更快的选择是创建一个随机彩色图像实例,并使用j
将图像放在另一个上面。
u