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"