CGFloat fixelW = CGImageGetWidth(image.CGImage);html
CGFloat fixelH = CGImageGetHeight(image.CGImage);android
在使用CGBitmapContextCreate建立位图时,此函数会判断Color Space和Bitmap info是否匹配,经过设置ios
// CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst;算法
// CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst;app
来让其二者匹配,kCGBitmapByteOrder32Little设置的是Bitmap info,kCGImageAlphaPremultipliedFirst设置的是Color Space。ide
后来发现问题出如今这处: UIGraphicsBeginImageContextWithOptions(weakSelf.size, YES, 0.0); 由于weakSelf.size的值CGSizeMake(0, 0),致使错误。函数
arg1.setBackgroundColor(Color.parseColor("#87CEFA"));工具
总结一下:setBackgroundResource(R.color.XXX)改变的颜色是最下层的颜色,当改变完颜色之后,由于我头部布局在xml文件中默认颜色是white,因此又给white遮盖掉了。布局
xml 文件中布局默认的颜色呢,能够理解为显示在中层。当我用Resource这个方法,把颜色改变过来之后,它由于在最下层,因此直接被中层的给刷掉了,所以颜色又变了回去。post
而setBackgroundColor(context.getResouce().getColor(R.color.XXX))呢,能够理解为改变的是最上层的颜色,无论我xml布局中的颜色是什么色,我在你布局颜色上层又给刷了回去。因此就显色了。
一、用android系统的透明效果
android:background="@android:color/transparent"
原来是父类视图的属性没有设置的缘由,将父类视图设置为居中边可解决,即android:gravity="center":
Jphide是基于最低有效位LSB的JPEG格式图像隐写算法,使用JPEG图像做为载体是由于相比其余图像格式更不容易发现隐藏信息,由于JPEG图像在DCT变换域上进行隐藏比空间域隐藏更难检测,而且鲁棒性更强,同时Blowfish算法有较强的抗统计检测能力。
因为JPEG图像格式使用离散余弦变换(Discrete Cosine Transform,DCT)函数来压缩图像,而这个图像压缩方法的核心是:经过识别每一个8×8像素块中相邻像素中的重复像素来减小显示图像所需的位数,并使用近似估算法下降其冗余度。所以,咱们能够把DCT看做一个用于执行压缩的近似计算方法。由于丢失了部分数据,因此DCT是一种有损压缩(Loss Compression)技术,但通常不会影响图像的视觉效果。
Jphide隐写过程大体为:先解压压缩JPEG图像,获得DCT系数;而后对隐藏信息用户给定的密码进行Blowfish加密;再利用Blowfish算法生成伪随机序列,并据此找到须要改变的DCT系数,将其末位变为须要隐藏的信息的值。最后把DCT系数从新压回成JPEG图片,下面是我的对隐写过程理解画出的大体流程图。
static public String s_ARGBToRGBA(String argb) { StringBuilder sb = new StringBuilder(); if (argb.length() == 9) { sb.append("#"); sb.append(argb.substring(3,5)); sb.append(argb.substring(5,7)); sb.append(argb.substring(7,9)); sb.append(argb.substring(1,3)); //#FF 00 11 22 MyLog.logMsg("s_ARGBToRGBA argb: " + argb + " convert to:" + sb.toString()); // return sb.toString(); return "#" + argb.substring(3,5) + argb.substring(5,7) + argb.substring(7,9) + argb.substring(1,3); } else if (argb.length() == 7) { //#00 11 22 sb.append("#"); sb.append(argb.substring(1,3)); sb.append(argb.substring(3,5)); sb.append(argb.substring(5,7)); sb.append("FF"); MyLog.logMsg("s_ARGBToRGBA argb: " + argb + " convert to:" + sb.toString()); // return sb.toString(); return "#" + argb.substring(1,3) + argb.substring(3,5) + argb.substring(5,7) + "FF"; } else { MyLog.logMsg("s_ARGBToRGBA argb: " + argb); return argb; } } * "hamburger".substring(4, 8) returns "urge" * "smiles".substring(1, 5) returns "mile"