图片放大可以用很多插值方法,比如在html中指定img元素的width属性时,浏览器会自动对其进行插值放大。但一些时候我们需要自定义的插值放大方法,比如下面的链接演示了雷达回波图片的放大,采用了基本的最大邻域法来进行放大,这时需要我们自己来写算法。
先看演示:雷达回波图采用最大邻域法来进行放大
下面是主要的两个处理函数:
//获取图片像素信息
var getImagePixelData = function(img){
var canvas = $('
//获取图片像素信息
var getImagePixelData = function(img){
var canvas = $('
svn checkout path(path是服务器上的目录)
例如:svn checkout svn://192.168.1.1/pro/domain
简写:svn co
svn add file (此时尚未提交到服务器版本库中)
例如:svn add test.php(添加test.php)
svn add *.php(添加当前目录下所有的php文件)
svn commit -m "LogMessage" [-N] [--no-unlock] PATH
(如果选择了保持锁,就使用–no-unlock开关)
例如:svn commit -m "add test file for my test" test.php
简写:svn ci
svn lock -m "LockMessage" [--force] PATH
例如:svn lock -m "lock test file" test.php
svn unlock PATH
svn update -r m path
例如: svn update如果后面没有目录,默认将当前目录以
及子目录下的所有文件都更新到最新版本。
svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,
是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
简写:svn up
svn status path...(目录下的文件和子目录的状态,正常状态不显示)
【?:不在svn的控制中;M:内容被修改;C:发生冲突;
A:预定加入到版本库;K:被锁定】
2)svn status -v path(显示文件和子目录状态)
第一列保持相同,第二列显示工作版本号,第三和第四列显示
最后一次修改的版本号和修改人。
注:svn status、svn diff和 svn revert这三条命令在
没有网络的情况下也可以执行的,
原因是svn在本地的.svn中保留了本地版本的原始拷贝。
简写:svn st
svn delete path -m "delete test fle"
例如:svn delete svn://192.168.1.1/pro/test.php -m "delete file"
或者直接svn delete test.php 然后再svn ci -m "delete test file"(推荐)
简写:svn (del, remove, rm)
svn move -m "move test fle"
例如:svn move -m "move test file" a.php b.php
svn move -m "move test file" address admin/address
把当前目录下得address目录移动到当前目录下的admin/address下
svn log path
例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化
svn info path
例如:svn info test.php
svn diff path(将修改的文件与基础版本比较)
例如:svn diff test.php
svn diff -r m:n path(对版本m和版本n比较差异)
例如:svn diff -r 200:201 test.php
简写:svn di
svn merge -r m:n path
例如:svn merge -r 200:205 test.php(将版本200与205之间的差异
合并到当前文件,但是一般都会产生冲突,需要处理一下)
svn help
svn help ci
svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:
用法: revert PATH…
注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复
被删除的目录
svn resolved: 移除工作副本的目录或文件的“冲突”状态。
用法: resolved PATH…
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的
相关文件,然后让 PATH 可以再次提交。
svn mkdir: 创建纳入版本控制下的新目录。
用法: 1、mkdir PATH…
2、mkdir URL…
创建版本控制的目录。
1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增
调度,以待下一次的提交。
2、每个以URL指定的目录,都会透过立即提交于仓库中创建。
在这两个情况下,所有的中间目录都必须事先存在。
svn list path
显示path目录下的所有属于版本库的文件和目录
简写:svn ls
svn switch (sw): 更新工作副本至不同的URL。
用法: 1、switch URL [PATH]
2、switch –relocate FROM TO [PATH...]
1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将
服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的
方法。
2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动
(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用
这个命令更新工作副本与仓库的对应关系。
svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。
svn cat -r PREV filename > filename
(PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)
客户端到服务端:
GET /demo HTTP/1.1
Host: example.com
Connection: Upgrade
Sec-WebSocket-Key2: 12998 5 Y3 1 .P00
Upgrade: WebSocket
Sec-WebSocket-Key1: 4@1 46546xW%0l 1 5
Origin: http://example.com
[8-byte security key]
服务端到客户端:
HTTP/1.1 101 WebSocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
WebSocket-Origin: http://example.com
WebSocket-Location: ws://example.com/demo
[16-byte hash response]
[Constructor(in DOMString url, in optional DOMString protocol)]
interface WebSocket {
readonly attribute DOMString URL;
// ready state
const unsigned short CONNECTING = 0;
const unsigned short OPEN = 1;
const unsigned short CLOSED = 2;
readonly attribute unsigned short readyState;
readonly attribute unsigned long bufferedAmount;
//networking
attribute Function onopen;
attribute Function onmessage;
attribute Function onclose;
boolean send(in DOMString data);
void close();
};
WebSocket implements EventTarget;
var wsServer = 'ws://localhost:8888/Demo';
var websocket = new WebSocket(wsServer);
websocket.onopen = function (evt) { onOpen(evt) };
websocket.onclose = function (evt) { onClose(evt) };
websocket.onmessage = function (evt) { onMessage(evt) };
websocket.onerror = function (evt) { onError(evt) };
function onOpen(evt) {
console.log("Connected to WebSocket server.");
}
function onClose(evt) {
console.log("Disconnected");
}
function onMessage(evt) {
console.log('Retrieved data from server: ' + evt.data);
}
function onError(evt) {
console.log('Error occured: ' + evt.data);
}
浏览器 | 支持情况 |
---|---|
Chrome | Supported in version 4+ |
Firefox | Supported in version 4+ |
Internet Explorer | Supported in version 10+ |
Opera | Supported in version 10+ |
Safari | Supported in version 5+ |
GET /demo HTTP/1.1
Host: example.com
Connection: Upgrade
Sec-WebSocket-Key2: 12998 5 Y3 1 .P00
Upgrade: WebSocket
Sec-WebSocket-Key1: 4@1 46546xW%0l 1 5
Origin: http://example.com
[8-byte security key]
private byte[] BuildServerPartialKey(string clientKey)
{
string partialServerKey = "";
byte[] currentKey;
int spacesNum = 0;
char[] keyChars = clientKey.ToCharArray();
foreach (char currentChar in keyChars)
{
if (char.IsDigit(currentChar)) partialServerKey += currentChar;
if (char.IsWhiteSpace(currentChar)) spacesNum++;
}
try
{
currentKey = BitConverter.GetBytes((int)(Int64.Parse(partialServerKey)
/ spacesNum));
if (BitConverter.IsLittleEndian) Array.Reverse(currentKey);
}
catch
{
if (currentKey!= null) Array.Clear(currentKey, 0, currentKey.Length);
}
return currentKey;
}
private byte[] BuildCompleteServerKey(byte[] serverKey1, byte[] serverKey2,
byte[] last8Bytes)
{
byte[] concatenatedKeys = new byte[16];
Array.Copy(serverKey1, 0, concatenatedKeys, 0, 4);
Array.Copy(serverKey2, 0, concatenatedKeys, 4, 4);
Array.Copy(last8Bytes, 0, concatenatedKeys, 8, 8);
System.Security.Cryptography.MD5 MD5Service =
System.Security.Cryptography.MD5.Create();
return MD5Service.ComputeHash(concatenatedKeys);
}
function ToggleConnectionClicked() {
if (SocketCreated && (ws.readyState == 0 || ws.readyState == 1)) {
ws.close();
} else {
Log("准备连接到聊天服务器 ...");
try {
ws =
new WebSocket("ws://" + document.getElementById("Connection").value);
SocketCreated = true;
} catch (ex) {
Log(ex, "ERROR");
return;
}
document.getElementById("ToggleConnection").innerHTML = "断开";
ws.onopen = WSonOpen;
ws.onmessage = WSonMessage;
ws.onclose = WSonClose;
ws.onerror = WSonError;
}
};
function WSonOpen() {
Log("连接已经建立。", "OK");
$("#SendDataContainer").show("slow");
};
function WSonMessage(event) {
Log(event.data);
};
function WSonClose() {
Log("连接关闭。", "ERROR");
document.getElementById("ToggleConnection").innerHTML = "连接";
$("#SendDataContainer").hide("slow");
};
function WSonError() {
Log("WebSocket错误。", "ERROR");
};
function SendDataClicked()
{
if (document.getElementById("DataToSend").value != "") {
ws.send(document.getElementById("txtName").value + "说 :\"" +
document.getElementById("DataToSend").value + "\"");
document.getElementById("DataToSend").value = "";
}
};
function Rect(w,h){
this.width = w;
this.height = h;
}
var rect1 = new Rect(10,20);
window.alert('rect1.width = '+rect1.width);
function Rect(w,h){
var width = w, height = h;
this.getWidth = function(){
return width;
}
this.getHeight = function(){
return height;
}
}
var rect1 = new Rect(10,20);
window.alert('rect1.width = '+rect1.getWidth());
dc.translate(300, 400);
dc.scale(1,-1);
dc.translate(300, 400);
dc.scale(1,-1);
dc.translate(-1000, -3000);
HANDLE WINAPI CreateThread(
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in SIZE_T dwStackSize,
__in LPTHREAD_START_ROUTINE lpStartAddress,
__in_opt LPVOID lpParameter,
__in DWORD dwCreationFlags,
__out_opt LPDWORD lpThreadId
);
uintptr_t _beginthread(
void( *start_address )( void * ),
unsigned stack_size,
void *arglist
);
LRESULT WINAPI SendMessage(
__in HWND hWnd,
__in UINT Msg,
__in WPARAM wParam,
__in LPARAM lParam
);
MSG msg = { };
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
a. Post一个消息(可以调用API函数PostMessage)表示消息将经过消息队列,通过消息循环来分发消息
b. Send一个消息(可以调用API函数SendMessage)表示消息会跳过消息队列,操作系统直接调用窗口处理程序
移动或点击鼠标、敲击键盘等大部分消息为队列消息。
仅当消息队列中没有其它消息时,WM_PAINT、WM_TIMER、WM_QUIT消息才被发送到窗口处理程序。
其它的消息按先进先出的原则被发送到窗口处理程序
用户可以用PostMessage等函数来发送一个队列消息
比如当窗口转为active状态时,或者用户调用某些系统函数(如SetWindowPos)时,消息将跳过消息队列,直接发往窗口处理程序。
用户可以调用SendMessage等函数来发送一个非队列消息
//code1
char *a = "helloworld";
std::cout<
//code2
const char *a = "helloworld";
//code3
char b[] = "helloworld";
std::cout<
//code4
char b[] = "helloworld";
b[0] = 'H';
std::cout<
#include
int main()
{
const char* p1 = "helloworld";
char array1[] = "helloworld";
const char* p2 = "helloworld";
std::cout<<" p1's address: "< <<"\n array1's address:"< <<"\n p2's address: "<
}
p1's address: 13072640
array1's address:1899864
p2's address: 13072640
// class cpp_regex_traits_base:
// acts as a container for locale and the facets we are using.
//
template
struct cpp_regex_traits_base
{
cpp_regex_traits_base(const std::locale& l)
{ imbue(l); }
std::locale imbue(const std::locale& l);
std::locale m_locale;
std::ctype const* m_pctype; //这个类用来识别空白符
//……
}
$BOOST_ROOT\ .................boost 根目录
index.htm .........A copy of www.boost.org starts here
boost\ .........................所有的Boost头文件
libs\ ............各种库的测试用例,文档说明。可以在这个文件夹中查看各种库怎么使用
index.html ........库文档从这里开始
algorithm\
any\
array\
…更多的库…
status\ .........................Boost范围测试套件
tools\ ...........一些有用工具, 比如 Boost.Build, quickbook, bcp
more\ ..........................政策等其它文档.
doc\ ...............所有Boost库文档的子集
bootstrap.bat
bjam stage --with-regex link=static threading=multi runtime-link=static
CSimpleIniA ini;
ini.SetUnicode();
ini.LoadFile("myfile.ini");
const char * pVal = ini.GetValue("section", "key", "default");
ini.SetValue("section", "key", "newvalue");
// Create config object
//
Config config;
// load a configuration/.ini file
//
config.load("myfile.ini");
// read information
//
config.setSection("General Info");
double cost = config.getDoubleValue("Cost");
const char *company = config.getStringValue("Company Name");
// create information
//
config.setSection("new section");
config.setStringValue("animal type", "giraffe");
config.setBoolValue("mammal", true);
// save changes
//
config.save();
int var1;
double var2;
const char *var3;
if(config.lookupValue("values.var1", var1)
&& config.lookupValue("values.var2", var2)
&& config.lookupValue("values.var3", var3))
{
// use var1, var2, var3
}
else
{
// error handling here
}
//获取cpu的空闲百分比
function get_cpufree(){
$cmd = "top -n 1 -b -d 0.1 | grep 'Cpu'";//调用top命令和grep命令
$lastline = exec($cmd,$output);
preg_match('/(\S+)%id/',$lastline, $matches);//正则表达式获取cpu空闲百分比
$cpufree = $matches[1];
return $cpufree;
}
//获取内存空闲百分比
function get_memfree(){
$cmd = 'free -m';//调用free命令
$lastline = exec($cmd,$output);
preg_match('/Mem:\s+(\d+)/',$output[1], $matches);
$memtotal = $matches[1];
preg_match('/(\d+)$/',$output[2], $matches);
$memfree = $matches[1]*100.0/$memtotal;
return $memfree;
}
//获取某个程序当前的进程数
function get_proc_count($name){
$cmd = "ps -e";//调用ps命令
$output = shell_exec($cmd);
$result = substr_count($output, ' '.$name);
return $result;
}
$cpufree = get_cpufree();
while( $cpufree<30 ){
// wait for 0.1 seconds
usleep(0.1*1000000);
$cpufree = get_cpufree();
};