canvas畫素點獲取 拾色器 放大器

2021-09-11 13:38:12 字數 2657 閱讀 8976

最近在學習canvas,然後照葫蘆畫瓢簡單實現了幾個小demo,跟大家一塊學習一下。

用法:

context.drawimage(img[, sx, sy, swidth, sheight], x, y[, width, height]);

複製**

引數

描述img

sx可選。開始剪下的 x 座標位置。

sy可選。開始剪下的 y 座標位置。

swidth

可選。被剪下影象的寬度。

sheight

可選。被剪下影象的高度。

x在畫布上放置影象的 x 座標位置。

y在畫布上放置影象的 y 座標位置。

width

可選。要使用的影象的寬度。(伸展或縮小影象)

height

可選。要使用的影象的高度。(伸展或縮小影象)

用法:

context.getimagedata(x, y, width, height);

複製**

引數描述x

開始複製的左上角位置的 x 座標。

y開始複製的左上角位置的 y 座標。

width

將要複製的矩形區域的寬度。

height

將要複製的矩形區域的高度。

方法返回 imagedata 物件,該物件拷貝了畫布指定矩形的畫素資料。 是uint8clampedarray型別的一維陣列,包含著rgba格式的整型資料。 對於 imagedata 物件中的每個畫素,都存在著四方面的資訊,即rgba值:

color/alpha 以陣列形式存在,並儲存於 imagedata 物件的 data 屬性中。

這個樣子:

先來一下demo,通過getimagedata方法獲取滑鼠指標處的畫素值。

部分**:

methods: 

}, methods:

}, mounted () ;

this.canvas.onmousemove = () => }}

複製**

還可以取本地或者遠端跨域的,像這樣

第乙個問題之前有寫過一篇文章,可以看這裡,這裡不贅述了。

注意 第二個問題源於canvas無法對沒有許可權的跨域進行操作,如出現跨域,對的操作(如getimagedata、canvas.todataurl)會報錯:uncaught domexception: failed to execute 'getimagedata' on 'canvasrenderingcontext2d': the canvas has been tainted by cross-origin data. 即canvas已經被跨域的資料汙染了。

要解決這個問題,就需要所在的伺服器允許跨域訪問(設定訊息頭access-control-allow-origin="*"或者你的**網域名稱),且本地也需要開啟跨域許可權(img.crossorigin = "anonymous")。

由於一般的伺服器都是允許跨域的,所以前端只要設定img.crossorigin = "anonymous"就可以了。

當然,如果伺服器設定了防盜煉的話,我們本地開啟了跨域許可權也是沒有用的。

部分**:

data () 

},methods: ,

onfilechange (e) ;

}, draw (img) ,

onconfirmurl () ;

}},mounted ()

}複製**

下面是乙個放大鏡效果,類似pc端**頁面產品預覽的效果。這樣:

這個效果的實現相當簡單,只是直接利用了drawimage的「擷取」功能,把左側擷取的50 * 50的畫布放大後,重新畫在了新的畫布上。

部分**:

const sample_width = 50,

canvas_widht = 300;

export

default

}, methods:

if(x > canvas_widht - sample_width / 2)

if(y < sample_width / 2)

if(y > canvas_widht - sample_width / 2)

let x1 = x - sample_width / 2,

y1 = y - sample_width / 2;

this.drawcanvas(this.img);

this.showmagnifier(x1, y1);

this.drawsampleframe(x1, y1);

},drawsampleframe (x1, y1) ,

onfilechange (e) ;

},drawcanvas (img) ,

onconfirmurl () ;

},showmagnifier (x, y)

}, mounted ()

this.canvas.onmouseout = () => }}

複製**

OpenCv畫素點獲取與修改

1 matlab獲取彩色影象畫素值的方法 三通道排序分別對應彩色影象的rgb三通道 2 opencv中獲取影象畫素的方法 方法一 注意記憶體中儲存順序是bgr 方法二 for int i 0 i img height i 假設灰度影象image,訪問其i行j列的象素可以這樣 cv image ele...

openCV畫素點處理

獲得畫素點的值便可以更加靈活的進行影象處理,在opencv裡可以通過cvget2d 和cvset2d 兩個函式加上乙個cvscalar結構體做到。opencv中,cvscalar結構為 typedef struct cvscalar cvscalar 4個double型變數,演算法處理時不至於被強制...

GetPixel 取畫素點

函式原型 colorref getpixel hdc hdc,int nxpos,int nypos 引數 hdc 裝置環境控制代碼。nxpos 指定要檢查的畫素點的邏輯x軸座標。nypos 指定要檢查的畫素點的邏輯y軸座標。返回值 返回值是該象像點的rgb值。如果指定的畫素點在當前剪輯區之外 那麼...