百度智能小程序 像素數(shù)據(jù)繪制到畫布

2020-09-05 14:21 更新

swan.canvasPutImageData

解釋:將像素數(shù)據(jù)繪制到畫布的方法。在自定義組件下,第二個參數(shù)傳入自定義組件實例 this ,以操作組件內(nèi) <canvas> 組件。

Web 態(tài)說明:由于 Web 態(tài)遵循瀏覽器對 W3C 標(biāo)準(zhǔn)的實現(xiàn)程度,在 W3C 規(guī)范中, putImageData 方法的入?yún)⒅械?width 、 height 、 data 需要遵循 data.length === 4 * width * height 的關(guān)系,否則會進入 fail 回調(diào)。但是在百度 APP 內(nèi)的小程序環(huán)境下,客戶端不會校驗 data 的大小。為了避免 Web 態(tài)運行異常,請盡量保證入?yún)⒎蠘?biāo)準(zhǔn)。

(如果您是如代碼示例所示的用法,通過 canvasGetImageData 獲取 data 并傳入 putImageData ,則只需要保證 width 和 height 與 canvasGetImageData 中的 width 和 height 一致即可。)

方法參數(shù)

Object object

object 參數(shù)說明

屬性名類型必填默認值說明Web 態(tài)說明

canvasId

String

畫布標(biāo)識,傳入 <canvas>組件的 canvas-id 屬性。

x

Number

將要被提取的圖像數(shù)據(jù)矩形區(qū)域的左上角橫坐標(biāo)

y

Number

將要被提取的圖像數(shù)據(jù)矩形區(qū)域的左上角縱坐標(biāo)

width

Number

將要被提取的圖像數(shù)據(jù)矩形區(qū)域的寬度

height

Number

將要被提取的圖像數(shù)據(jù)矩形區(qū)域的高度

data

Uint8ClampedArray

圖像像素點數(shù)據(jù),一維數(shù)組,每四項表示一個像素點的 rgba 。

數(shù)組長度必須為 4 * width * height

success

Function

接口調(diào)用成功的回調(diào)函數(shù)

fail

Function

接口調(diào)用失敗的回調(diào)函數(shù)

complete

Function

接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會執(zhí)行)

示例 

在開發(fā)者工具中打開


圖片示例

代碼示例

<view class="wrap">
    <canvas canvas-id="canvas1"></canvas>
    <canvas canvas-id="canvas2"></canvas>
    <button type="primary" bindtap="canvasPutImageData">canvasPutImageData</button>
</view>
Page({
    /* eslint-enable */
    onReady() {
        const ctx = swan.createCanvasContext('canvas1');
        ctx.setFillStyle('#0f0f0f');
        ctx.arc(100, 100, 50, 0, 2 * Math.PI);
        ctx.fill();
        ctx.beginPath();
        ctx.setStrokeStyle('#0000ff');
        ctx.moveTo(90, 70);
        ctx.lineTo(70, 80);
        ctx.lineTo(90, 80);
        ctx.closePath();
        ctx.stroke();
        ctx.beginPath();
        ctx.setStrokeStyle('#0000ff');
        ctx.moveTo(130, 70);
        ctx.lineTo(110, 80);
        ctx.lineTo(130, 80);
        ctx.closePath();
        ctx.stroke();
        ctx.beginPath();
        ctx.setFillStyle('#00ff00');
        ctx.arc(100, 100, 20, 0, 1 * Math.PI);
        ctx.fill();
        ctx.setFillStyle('#00ff00');
        ctx.setFontSize(12);
        ctx.fillText('haha', 165, 78);
        ctx.moveTo(100, 50);
        ctx.setStrokeStyle('#00ff00');
        ctx.bezierCurveTo(100, 25, 75, 25, 50, 50);
        ctx.stroke();
        ctx.moveTo(100, 50);
        ctx.quadraticCurveTo(75, 25, 50, 50);
        ctx.stroke();
        ctx.draw();
    },
    canvasPutImageData() {
        swan.canvasGetImageData({
            canvasId: 'canvas1',
            x: 0,
            y: 0,
            width: 200,
            height: 200,
            success: res => {
                swan.canvasPutImageData({
                    canvasId: 'canvas2',
                    x: 0,
                    y: 0,
                    width: 200,
                    height: 200,
                    data: res.data,
                    success: res => {
                        console.log('canvasPutImageData success');
                    },
                    fail: err => {
                        console.log('canvasPutImageData fail', err);
                    }
                })
            },
            fail: err => {
                console.log('canvasGetImageData fail', err);
            }
        });
    }
});
.wrap {
    padding: 50rpx 30rpx;
}

錯誤碼

Android

錯誤碼說明

201

解析失敗,請檢查調(diào)起協(xié)議是否合法。

1001

執(zhí)行失敗

iOS

錯誤碼說明

202

解析失敗,請檢查參數(shù)是否正確。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號