LayerDrawable stars = (LayerDrawable) RatingBar_RB.getProgressDrawable();
stars.getDrawable(2).setColorFilter(Color.YELLOW,PorterDuff.Mode.SRC_ATOP);
2014年9月10日 星期三
2014年8月30日 星期六
MySQL,MSSQL TEMPORARY TABLE
MYSQL
CREATE TEMPORARY TABLE date_list (
oc_date date NOT NULL
);
INSERT INTO date_list (oc_date ) values('2014-08-26');
INSERT INTO date_list (oc_date ) values('2014-08-27');
INSERT INTO date_list (oc_date ) values('2014-08-28');
INSERT INTO date_list (oc_date ) values('2014-08-29');
SELECT * FROM date_list;
MSSQL
CREATE TABLE #date_list (
oc_date date NOT NULL
);
INSERT INTO #date_list (oc_date ) values('2014-08-26');
INSERT INTO #date_list (oc_date ) values('2014-08-27');
INSERT INTO #date_list (oc_date ) values('2014-08-28');
INSERT INTO #date_list (oc_date ) values('2014-08-29');
SELECT * FROM #date_list;
DROP TABLE #date_list;
CREATE TEMPORARY TABLE date_list (
oc_date date NOT NULL
);
INSERT INTO date_list (oc_date ) values('2014-08-26');
INSERT INTO date_list (oc_date ) values('2014-08-27');
INSERT INTO date_list (oc_date ) values('2014-08-28');
INSERT INTO date_list (oc_date ) values('2014-08-29');
SELECT * FROM date_list;
MSSQL
CREATE TABLE #date_list (
oc_date date NOT NULL
);
INSERT INTO #date_list (oc_date ) values('2014-08-26');
INSERT INTO #date_list (oc_date ) values('2014-08-27');
INSERT INTO #date_list (oc_date ) values('2014-08-28');
INSERT INTO #date_list (oc_date ) values('2014-08-29');
SELECT * FROM #date_list;
DROP TABLE #date_list;
2014年5月26日 星期一
php mcrypt_encrypt mcrypt_decrypt
public static function AESEncode($data){
$blockSize = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC);
$padding = $blockSize - (strlen($data) % $blockSize);
$data .= str_repeat(chr($padding), $padding);
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, self::$PrivateKey, $data, MCRYPT_MODE_CBC, self::$IV);
$edata = base64_encode($encrypted);
return $edata;
}
public static function AESDecode($edata){
$encryptedData = base64_decode($edata);
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, self::$PrivateKey, $encryptedData, MCRYPT_MODE_CBC, self::$IV);
//需移除
$padding = ord($decrypted[strlen($decrypted) - 1]);
return substr($decrypted, 0, -$padding);
}
$blockSize = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC);
$padding = $blockSize - (strlen($data) % $blockSize);
$data .= str_repeat(chr($padding), $padding);
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, self::$PrivateKey, $data, MCRYPT_MODE_CBC, self::$IV);
$edata = base64_encode($encrypted);
return $edata;
}
public static function AESDecode($edata){
$encryptedData = base64_decode($edata);
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, self::$PrivateKey, $encryptedData, MCRYPT_MODE_CBC, self::$IV);
//需移除
PKCS7padding
$padding = ord($decrypted[strlen($decrypted) - 1]);
return substr($decrypted, 0, -$padding);
}
2014年4月26日 星期六
android opencv
Size dsize = new Size(img.width() * scale, img.height() * scale);Mat img2 = new Mat();Imgproc.resize(img, img2, dsize);
scale为缩放的大小
resize函数参数1为原图,参数2为缩放之后的图
2、图片读写
Mat img = Highgui.imread(bitmappath);Highgui.imwrite("/mnt/sdcard/www.png", thumb2);
3、bitmap转为Mat
Mat bgImg = Utils.bitmapToMat(bm); Imgproc.cvtColor(bgImg, bgImg, Imgproc.COLOR_RGB2BGR, 3);
第二行代码是颜色值转换,因为从实验来看,bitmap转为mat之后,红蓝值可能会发生颠倒,因而用此方法再将颜色值转回来
4、Mat旋转
5、Mat截取Mat mat_bmp = img2; double radians = Math.toRadians(90); double sin = Math.abs(Math.sin(radians)); double cos = Math.abs(Math.cos(radians)); int width = mat_bmp.width(); int height = mat_bmp.height(); int newWidth = (int) (width * cos + height * sin); int newHeight = (int) (width * sin + height * cos); // 能把原图像和旋转后图像同时放入的外框 int frameWidth = Math.max(width, newWidth); int frameHeight = Math.max(height, newHeight); Size frameSize = new Size(frameWidth, frameHeight); Mat mat_frame = new Mat(frameSize, mat_bmp.type()); // 将原图像copy进外框 int offsetX = (frameWidth - width) / 2; int offsetY = (frameHeight - height) / 2; Mat mat_frame_submat = mat_frame.submat(offsetY, offsetY + height, offsetX, offsetX + width); mat_bmp.copyTo(mat_frame_submat); // 旋转外框 Point center = new Point(frameWidth / 2, frameHeight / 2); Mat mat_rot = Imgproc.getRotationMatrix2D(center, 90, 1.0); Mat mat_res = new Mat(); // result Imgproc.warpAffine(mat_frame, mat_res, mat_rot, frameSize, Imgproc.INTER_LINEAR, Imgproc.BORDER_CONSTANT, Scalar.all(0)); // 从旋转后的外框获取新图像 offsetX = (frameWidth - newWidth) / 2; offsetY = (frameHeight - newHeight) / 2; Mat mat_res_submat = mat_res.submat(offsetY, offsetY + newHeight, offsetX, offsetX + newWidth);
Mat imageVROI = mat_res_submat.submat(roi);
roi为Rect,例如:Rect roi = new Rect(0, 0, width, height);
6、图片合成(添加水印)
假如frontImg为要添加的图,bgImg为背景图
Mat imageROI = bgImg.submat(new Rect(a, b, c, d));frontImg.copyTo(ImageROI,frontImg);
Rect第一、二个参数分别为前面的要添加到背景图的横纵坐标,三、四参数为宽高。
7、遍历像素
byte sdata[] = { 0, 0, 0 };byte ndata[] = { 0, 0, 0 };for (int i = 0; i < img.rows(); i++){for (int j = 0; j < img.cols(); j++){if (img.channels() == 3){img.get(i, j, sdata);if ((sdata[0] == (byte) 255) && (sdata[1] == (byte) 20) && (sdata[2] == (byte) 255))img.put(i, j, ndata);}}}
上面代码实现的操作为遍历所有像素,并将颜色值为255,20,255的像素点替换为颜色值为0,0,0
MySQL Transaction
MySQL 常用的兩個資料表類型:MyISAM、InnoDB,MyISAM 不支援交易功能
交易功能4個特性 (ACID)
- Atomicity (原子性、不可分割):交易內的 SQL 指令,不管在任何情況,都只能是全部執行完成,或全部不執行。若是發生無法全部執行完成的狀況,則會回滾(rollback)到完全沒執行時的狀態。
- Consistency (一致性):交易完成後,必須維持資料的完整性。所有資料必須符合預設的驗證規則、外鍵限制...等。
- Isolation (隔離性):多個交易可以獨立、同時執行,不會互相干擾。這一點跟後面會提到的「隔離層級」有關。
- Durability (持久性):交易完成後,異動結果須完整的保留。
開始進入交易模式
- SQL 指令:START TRANSACTION 或 BEGIN
結束交易模式
- 交易完成:使用 COMMIT 儲存所有變動,並結束交易。
- 交易過程異常:使用 ROLLBACK 回滾,取消交易,還原到未進行交易的狀態。(若交易過程連線中斷,沒 COMMIT 提交的變更,亦會如同執行 ROLLBACK 取消交易)
儲存點 (SAVEPOINT)
- 交易過程中,可標示多個不同的儲存點,有需要時可 ROLLBACK 到某個儲存點。
- 建立儲存點:SAVEPOINT 名稱
- 刪除儲存點:RELEASE SAVEPOINT 名稱
- ROLLBACK 到某個儲存點:ROLLBACK TO SAVEPOINT 名稱
- 如果建立新儲存點時,已有同名稱的舊儲存點,舊儲存點將被刪除,並建立新的儲存點。
- 官網說明:http://dev.mysql.com/doc/refman/5.7/en/savepoint.html
不能 ROLLBACK 的指令
會造成自動終止交易並 COMMIT 的指令
- 執行這些指令時,如同先執行了 commit,也就是會先有 commit 的效果。
- DDL 指令:ALERT TABLE、CREATE INDEX、CREATE TABLE、DROP TABLE、DROP DATABASE、RENAME TABLE、TRUNCATE、LOCK TABLES、UNLOCK TABLES...等
- SET AUTOCOMMIT=1、 BEGIN、START TRANSACTION
- 其他,可參考官網更詳細的說明:http://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html
AUTOCOMMIT 自動提交設定
- AUTOCOMMIT 的設定值,預設一般都是 1
- 查詢目前 AUTOCOMMIT 的設定值:SELECT @@AUTOCOMMIT
- 將 AUTOCOMMIT 改為 0 時 ( SET AUTOCOMMIT=0 ),就算沒使用 START TRANSACTION 或 BEGIN ,整個連線執行的 SQL 指令,都會等到下達 COMMIT 提交後,才會真正儲存變更。也就是當 AUTOCOMMIT=0 時,跟在交易模式下相同。
2014年4月13日 星期日
android ScrollView ListView 取消陰影
scrollView.setHorizontalFadingEdgeEnabled(false);
scrollView.setVerticalFadingEdgeEnabled(false);
android 2.3 以上
scroll_view.setOverScrollMode(ScrollView.OVER_SCROLL_NEVER);
不隱藏scrollbar
scroll_view.setScrollbarFadingEnabled(false);
設定scrollbar in code
try {
Field mScrollCacheField = View.class
.getDeclaredField("mScrollCache");
mScrollCacheField.setAccessible(true);
Object mScrollCache = mScrollCacheField.get(scroll_view);
Field scrollBarField = mScrollCache.getClass().getDeclaredField(
"scrollBar");
scrollBarField.setAccessible(true);
Object scrollBar = scrollBarField.get(mScrollCache);
Method method = scrollBar.getClass().getDeclaredMethod(
"setVerticalThumbDrawable", Drawable.class);
method.setAccessible(true);
method.invoke(scrollBar,
getResources().getDrawable(R.drawable.scrollbar_track));
method = scrollBar.getClass().getDeclaredMethod(
"setVerticalTrackDrawable", Drawable.class);
method.setAccessible(true);
method.invoke(scrollBar,
getResources().getDrawable(R.drawable.scrollbar_thumb));
} catch (Exception e) {
e.printStackTrace();
}
2014年4月8日 星期二
android TextView 注意
// does not work
tv.setPadding(20, 20, 20, 20);
tv.setBackgroundResource(R.drawable.border);
// works
tv.setBackgroundResource(R.drawable.border);
tv.setPadding(20, 20, 20, 20);
2014年4月7日 星期一
android RadioButton set button in code
setButtonDrawable(getRadioIcon());
private StateListDrawable getRadioIcon() {
StateListDrawable states = new StateListDrawable();
states.addState(new int[] { android.R.attr.state_checked },
getCheckedIcon());
states.addState(new int[] { -android.R.attr.state_checked },
getNormalIcon());
states.addState(new int[] {}, getNormalIcon());
return states;
}
private GradientDrawable getNormal() {
int size = GSet.getMargin(40);
int strokeWidth = GSet.getMargin(3); // 3dp
int strokeColor = Color.parseColor("#0199fc");
int fillColor = Color.parseColor("#00000000");
GradientDrawable gd = new GradientDrawable();
gd.setSize(size, size);
gd.setShape(GradientDrawable.OVAL);
gd.setColor(fillColor);
gd.setStroke(strokeWidth, strokeColor);
return gd;
}
private GradientDrawable getChecked() {
int fillColor = Color.BLACK;
GradientDrawable gd = new GradientDrawable();
gd.setShape(GradientDrawable.OVAL);
gd.setColor(fillColor);
return gd;
}
private LayerDrawable getNormalIcon() {
Drawable[] layers = new Drawable[1];
layers[0] = getNormal();
LayerDrawable drawable = new LayerDrawable(layers);
int margin = GSet.getMargin(5);
drawable.setLayerInset(0, margin, margin, margin, margin);
return drawable;
}
private LayerDrawable getCheckedIcon() {
Drawable[] layers = new Drawable[2];
layers[0] = getNormal();
layers[1] = getChecked();
LayerDrawable drawable = new LayerDrawable(layers);
int margin = GSet.getMargin(5);
drawable.setLayerInset(0, margin, margin, margin, margin);
margin = GSet.getMargin(15);
drawable.setLayerInset(1, margin, margin, margin, margin);
return drawable;
}
private StateListDrawable getRadioIcon() {
StateListDrawable states = new StateListDrawable();
states.addState(new int[] { android.R.attr.state_checked },
getCheckedIcon());
states.addState(new int[] { -android.R.attr.state_checked },
getNormalIcon());
states.addState(new int[] {}, getNormalIcon());
return states;
}
private GradientDrawable getNormal() {
int size = GSet.getMargin(40);
int strokeWidth = GSet.getMargin(3); // 3dp
int strokeColor = Color.parseColor("#0199fc");
int fillColor = Color.parseColor("#00000000");
GradientDrawable gd = new GradientDrawable();
gd.setSize(size, size);
gd.setShape(GradientDrawable.OVAL);
gd.setColor(fillColor);
gd.setStroke(strokeWidth, strokeColor);
return gd;
}
private GradientDrawable getChecked() {
int fillColor = Color.BLACK;
GradientDrawable gd = new GradientDrawable();
gd.setShape(GradientDrawable.OVAL);
gd.setColor(fillColor);
return gd;
}
private LayerDrawable getNormalIcon() {
Drawable[] layers = new Drawable[1];
layers[0] = getNormal();
LayerDrawable drawable = new LayerDrawable(layers);
int margin = GSet.getMargin(5);
drawable.setLayerInset(0, margin, margin, margin, margin);
return drawable;
}
private LayerDrawable getCheckedIcon() {
Drawable[] layers = new Drawable[2];
layers[0] = getNormal();
layers[1] = getChecked();
LayerDrawable drawable = new LayerDrawable(layers);
int margin = GSet.getMargin(5);
drawable.setLayerInset(0, margin, margin, margin, margin);
margin = GSet.getMargin(15);
drawable.setLayerInset(1, margin, margin, margin, margin);
return drawable;
}
2014年3月27日 星期四
android opencv
讀入圖片
Mat src1 = Highgui.imread(filepath);
Imgproc.cvtColor(src1, src1, Imgproc.COLOR_RGB2BGR);
Bitmap轉Mat
Bitmap feature_icon = GBitmap.getResBitmap(this, R.drawable.feature);
Utils.bitmapToMat(bmp, mat);
Mat轉Bitmap
Bitmap bmp= Bitmap.createBitmap(mat.width(), mat.height(),
Config.RGB_565);
Utils.matToBitmap(mat, bmp);
高斯模糊
Imgproc.GaussianBlur(mat1, mat2, new Size(5, 5), 0);
取輪廓
Imgproc.Canny(mat1, mIntermediateMat, 50, 50);
找輪廓
Imgproc.findContours(mIntermediateMat, MatOfPoint list, new Mat(),
Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
取輪廓周長
double contourarea = Imgproc.contourArea(MatOfPoint);
輪廓取矩形
Rect rect = Imgproc.boundingRect(MatOfPoint);
裁減圖片
Mat cut = src1.submat(rect);
Mat src1 = Highgui.imread(filepath);
Imgproc.cvtColor(src1, src1, Imgproc.COLOR_RGB2BGR);
Bitmap轉Mat
Bitmap feature_icon = GBitmap.getResBitmap(this, R.drawable.feature);
Utils.bitmapToMat(bmp, mat);
Mat轉Bitmap
Bitmap bmp= Bitmap.createBitmap(mat.width(), mat.height(),
Config.RGB_565);
Utils.matToBitmap(mat, bmp);
高斯模糊
Imgproc.GaussianBlur(mat1, mat2, new Size(5, 5), 0);
取輪廓
Imgproc.Canny(mat1, mIntermediateMat, 50, 50);
找輪廓
Imgproc.findContours(mIntermediateMat, MatOfPoint list, new Mat(),
Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
取輪廓周長
double contourarea = Imgproc.contourArea(MatOfPoint);
輪廓取矩形
Rect rect = Imgproc.boundingRect(MatOfPoint);
裁減圖片
Mat cut = src1.submat(rect);
訂閱:
文章 (Atom)