【发布时间】:2018-02-19 17:57:27
【问题描述】:
我写了一个隐写算法,但是需要很长时间才能完成。这是因为我创建了一个新的位图实例BitmapStegan,并从旧位图bitmap 中获取每个像素。无论我是否修改它,我都必须在新的位图对象中设置它。因此,我最终会遍历所有像素,即使我只需要编辑其中的几个。
我该如何解决这个问题?
Bitmap BitmapStegan = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
for(int i=0; i<bitmap.getWidth(); i++){
for(int j=0; j<bitmap.getHeight(); j++){
int pixel=bitmap.getPixel(i, j);
int red= Color.red(pixel);
int green=Color.green(pixel);
int blue=Color.blue(pixel);
if (NumberBitsInMessage>0) {
/*
I put here my bit to red and greed and blue with LSB method
*/
}
BitmapStegan.setPixel(i, j, Color.argb(Color.alpha(pixel), red, green, blue));
}
}
imageView.setImageBitmap(BitmapStegan);
【问题讨论】:
-
您可以一次获取或设置所有像素,只需使用 Bitmap.getPixels/setPixels 方法。它会更快。
-
由于您没有向我们展示您的嵌入逻辑,我做出了合理的假设,即
NumberBitsInMessage是您必须嵌入的位数,并且对于每一位,您将其减少 1。所以,只要它是正数,您就可以嵌入更多位。如果我的假设不正确,请澄清。 -
@Reti43 你的假设是正确的。我的问题是当 **NumberBitsInMessage ** 小于 0 时,我必须继续将 auther 像素复制到 BitmapStegan
标签: java android bitmap steganography