A Blockly field that allows for user-inputted pixel grids. The image value is stored as a 2D array of 1s and 0s, and supports any size. The user can paint over pixels with their mouse, or randomize the grid.
Note: this field does not support serialization to XML.
yarn add @blockly/field-bitmap
npm install @blockly/field-bitmap --save
This field accepts up to 6 parameters:
-
"value"
to specify an initial value. Must be a 2D rectangular array of 1s and 0s. If not provided, the default is an empty grid of the specified size. -
"width"
to specify an initial width, if there is no initial value. If not provided, the default is a width of 5. -
"height"
to specify an initial height, if there is no initial value. If not provided, the default is a height of 5. -
fieldHeight"
to specify a static field height. If provided, the individual pixels will be resized to fit inside the field. This only affects the field as it is seen on a block and not the pop-up editor. Good for larger images. (Note: If this results in fractional pixel sizes, the overall field height may not exactly match the specified value on all browsers.) -
"colours"
to override the default colours, Default values:
{filled: '#363d80', empty: '#fff'}
-
"buttons"
to show or hide the "Randomize" and/or "Clear" buttons. If either is omitted, the button will be shown. Default values:
{randomize: true, clear: true}
import * as Blockly from 'blockly';
import {FieldBitmap} from 'blockly-field-bitmap';
Blockly.Blocks["test_field_bitmap"] = {
init: function () {
this.appendDummyInput()
.appendField("bitmap: ")
.appendField(new FieldBitmap(...), "FIELDNAME");
}
};
Example with default value:
import * as Blockly from 'blockly';
import '@blockly/field-bitmap';
Blockly.defineBlocksWithJsonArray([
{
type: 'test_field_bitmap',
message0: 'bitmap: %1',
args0: [
{
type: 'field_bitmap',
name: 'FIELDNAME',
value: [
[0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 0, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 0],
[0, 1, 0, 0, 0, 1, 0],
[0, 0, 1, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
],
},
],
},
]);
Example with width and height:
import * as Blockly from 'blockly';
import '@blockly/field-bitmap';
Blockly.defineBlocksWithJsonArray([
{
type: 'test_field_bitmap',
message0: 'bitmap: %1',
args0: [
{
type: 'field_bitmap',
name: 'FIELDNAME',
width: 8,
height: 8,
},
],
},
]);
Apache 2.0