diff --git a/core/display.js b/core/display.js index 701eba4ac..bf8d5fab6 100644 --- a/core/display.js +++ b/core/display.js @@ -224,6 +224,18 @@ export default class Display { this.viewportChangePos(0, 0); } + getImageData() { + return this._drawCtx.getImageData(0, 0, this.width, this.height); + } + + toDataURL(type, encoderOptions) { + return this._backbuffer.toDataURL(type, encoderOptions); + } + + toBlob(callback, type, quality) { + return this._backbuffer.toBlob(callback, type, quality); + } + // Track what parts of the visible canvas that need updating _damage(x, y, w, h) { if (x < this._damageBounds.left) { diff --git a/core/rfb.js b/core/rfb.js index 4b3526f9d..e6647eff4 100644 --- a/core/rfb.js +++ b/core/rfb.js @@ -500,6 +500,18 @@ export default class RFB extends EventTargetMixin { } } + getImageData() { + return this._display.getImageData(); + } + + toDataURL(type, encoderOptions) { + return this._display.toDataURL(type, encoderOptions); + } + + toBlob(callback, type, quality) { + return this._display.toBlob(callback, type, quality); + } + // ===== PRIVATE METHODS ===== _connect() { diff --git a/docs/API.md b/docs/API.md index 5aaee7a24..77e905675 100644 --- a/docs/API.md +++ b/docs/API.md @@ -155,6 +155,15 @@ protocol stream. [`RFB.clipboardPasteFrom()`](#rfbclipboardpastefrom) - Send clipboard contents to server. +[`RFB.getImageData()`](#rfbgetimagedata) + - Return the current content of the screen as an ImageData array. + +[`RFB.toDataURL()`](#rfbtodataurl) + - Return the current content of the screen as data-url encoded image file. + +[`RFB.toBlob()`](#rfbtoblob) + - Return the current content of the screen as Blob encoded image file. + ### Details #### RFB() @@ -423,3 +432,55 @@ to the remote server. **`text`** - A `DOMString` specifying the clipboard data to send. + +#### RFB.getImageData() + +The `RFB.getImageData()` method is used to return the current content of the +screen encoded as [`ImageData`](https://developer.mozilla.org/en-US/docs/Web/API/ImageData). + +##### Syntax + + RFB.getImageData(); + +#### RFB.toDataURL() + +The `RFB.toDataURL()` method is used to return the current content of the +screen encoded as a data URL that could for example be put in the `src` attribute +of an `img` tag. + +##### Syntax + + RFB.toDataURL(); + RFB.toDataURL(type); + RFB.toDataURL(type, encoderOptions); + +###### Parameters + +**`type`** *Optional* + - A string indicating the requested MIME type of the image + +**`encoderOptions`** *Optional* + - A number between 0 and 1 indicating the image quality. + +#### RFB.toBlob() + +The `RFB.toBlob()` method is used to return the current content of the +screen encoded as [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob). + +##### Syntax + + RFB.toDataURL(callback); + RFB.toDataURL(callback, type); + RFB.toDataURL(callback, type, quality); + +###### Parameters + +**`callback`** + - A callback function which will receive the resulting [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) + as the single argument + +**`type`** *Optional* + - A string indicating the requested MIME type of the image + +**`encoderOptions`** *Optional* + - A number between 0 and 1 indicating the image quality.