summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederik Fix <ich@derfred.com>2022-09-07 13:26:10 +0200
committerFrederik Fix <ich@derfred.com>2022-09-07 13:26:10 +0200
commitedc7520e273fa1b2cbd0abac6a9fe2c1bd2680d5 (patch)
tree66bb861807d9715909205c2d4ccb89245cbaa87c
parent2f1e11b54aa88cb24400fe93b64cec8024c919ab (diff)
downloadnovnc-edc7520e273fa1b2cbd0abac6a9fe2c1bd2680d5.tar.gz
access to raw image data
-rw-r--r--core/display.js12
-rw-r--r--core/rfb.js12
-rw-r--r--docs/API.md61
3 files changed, 85 insertions, 0 deletions
diff --git a/core/display.js b/core/display.js
index 701eba4..bf8d5fa 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 4b3526f..e6647ef 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 5aaee7a..77e9056 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.