@oliverphaser/nativescript-bitmap-factory
Advanced tools
Comparing version 1.0.2 to 1.0.3
{ | ||
"name": "@oliverphaser/nativescript-bitmap-factory", | ||
"version": "1.0.2", | ||
"version": "1.0.3", | ||
"description": "A NativeScript module for creating and manipulating bitmap images. Forked from mkloubert and updated for NativeScript 8 with fixed iOS crop bug.", | ||
@@ -5,0 +5,0 @@ "main": "bitmap-factory", |
454
README.md
@@ -1,59 +0,435 @@ | ||
[ios]: https://icomoon.io/icons9f9702a/13/340.svg "iOS" | ||
[android]: https://icomoon.io/icons9f9702a/13/342.svg "Android" | ||
[npm]: https://img.shields.io/npm/v/nativescript-eventify.svg?color=949393 | ||
[apple]: https://img.shields.io/badge/apple-%E2%9C%93-949393.svg?logo=apple&logoColor=white | ||
[android]: https://img.shields.io/badge/android-%E2%9C%93-949393.svg?logo=android&logoColor=white | ||
[support]: https://img.shields.io/static/v1.svg?logo=paypal&label=Support&message=oliverphaser&style=for-the-badge&color=0c67b5&labelColor=afb0b9 | ||
# ![android] ![ios] | ||
# NativeScript Eventify | ||
NativeScript has a method called `notify` you can use to notify an observable of changes. But you can't use it to trigger events like `tap` or `swipe`, enter NativeScript Eventify. | ||
[![npm]](https://www.npmjs.com/package/nativescript-eventify) | ||
![apple] | ||
![android] | ||
<br/> | ||
[![support]](https://paypal.me/oliverphaser) | ||
# NativeScript Bitmap Factory | ||
A [NativeScript](https://nativescript.org/) module for creating and manipulating bitmap images. | ||
## NativeScript 8 | ||
This will work only on NativeScript 8. | ||
## Supported Events | ||
- `tap` | ||
## NativeScript Toolbox | ||
## Roadmap | ||
- Add support for `doubleTap` events | ||
- Add support for `longPress` events | ||
- Add support for `swipe` events | ||
- Add support for `pan` events | ||
- Add support for `pinch` events | ||
- Add support for `rotate` events | ||
- Add support for `touch` events | ||
The originial module is part of [nativescript-toolbox](https://github.com/mkloubert/nativescript-toolbox). | ||
## Platforms | ||
* Android | ||
* iOS | ||
## Installation | ||
``` | ||
ns plugin add @oliverphaser/nativescript-eventify | ||
ns plugin add @oliverphaser/nativescript-bitmap-factory | ||
``` | ||
## Usage | ||
Just require it once. | ||
```js | ||
//app.js | ||
require("@oliverphaser/nativescript-eventify"); | ||
## Usage | ||
```typescript | ||
import BitmapFactory = require("@oliverphaser/nativescript-bitmap-factory"); | ||
import KnownColors = require("@nativescript/core/color/known-colors"); | ||
// create a bitmap with 640x480 | ||
var bmp = BitmapFactory.create(640, 480); | ||
// work with bitmap and | ||
// keep sure to free memory | ||
// after we do not need it anymore | ||
bmp.dispose(() => { | ||
// draw an oval with a size of 300x150 | ||
// and start at position x=0, y=75 | ||
// and use | ||
// "red" as border color and "black" as background color. | ||
bmp.drawOval("300x150", "0,75", | ||
KnownColors.Red, KnownColors.Black); | ||
// draw a circle with a radius of 80 | ||
// at the center of the bitmap (null => default) | ||
// and use | ||
// "dark green" as border color | ||
bmp.drawCircle(80, null, | ||
KnownColors.DarkGreen); | ||
// draws an arc with a size of 100x200 | ||
// at x=10 and y=20 | ||
// beginning at angle 0 with a sweep angle of 90 degrees | ||
// and a black border and a yellow fill color | ||
bmp.drawArc("100x200", "10,20", | ||
0, 90, | ||
KnownColors.Black, KnownColors.Yellow); | ||
// set a yellow point at x=160, y=150 | ||
bmp.setPoint("160,150", "ff0"); | ||
// draws a line from (0|150) to (300|75) | ||
// with blue color | ||
bmp.drawLine("0,150", "300,75", '#0000ff'); | ||
// writes a text in yellow color | ||
// at x=100, y=100 | ||
// by using "Roboto" as font | ||
// with a size of 10 | ||
bmp.writeText("This is a test!", "100,100", { | ||
color: KnownColors.Yellow, | ||
size: 10, | ||
name: "Roboto" | ||
}); | ||
// returns the current bitmap as data URL | ||
// which can be used as ImageSource | ||
// in JPEG format with a quality of 75% | ||
var data = bmp.toDataUrl(BitmapFactory.OutputFormat.JPEG, 75); | ||
// ... and in Base64 format | ||
var base64JPEG = bmp.toBase64(BitmapFactory.OutputFormat.JPEG, 75); | ||
// ... and as ImageSource | ||
var imgSrc = bmp.toImageSource(); | ||
}); | ||
``` | ||
```js | ||
/** | ||
* home-page.js | ||
* | ||
* Assume the view already has the event listner(s) setup. | ||
*/ | ||
## Functions | ||
// Simulates a tap event | ||
view.eventify({ eventName: "tap", object: view }); | ||
| Name | Description | | ||
| ---- | --------- | | ||
| asBitmap | Returns a value as wrapped bitmap. | | ||
| create | Creates a new bitmap instance. | | ||
| getDefaultOptions | Returns the default options for creating a new bitmap. | | ||
| makeMutable | A helper function that keeps sure to return a native image object that is able to be used as wrapped bitmap object. | | ||
| setDefaultOptions | Sets the default options for creating a new bitmap. | | ||
## Platform specific stuff | ||
You can access the `nativeObject` property to access the platform specific object. | ||
For Android this is a [Bitmap](https://developer.android.com/reference/android/graphics/Bitmap.html) object and for iOS this is an [UIImage](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIImage_Class/) object. | ||
To check the platform you can use the `android` and `ios` properties which have the same values as the corresponding properties from `application` core module. | ||
### Android | ||
You also can access the underlying [Canvas](https://developer.android.com/reference/android/graphics/Canvas.html) object by `__canvas` property. | ||
### iOS | ||
You also can access the underlying [CGImage](https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGImage/) object by`__CGImage` property. | ||
## Data types | ||
### IArgb | ||
Stores data of an RGB value with alpha value. | ||
These values can also be submitted as strings (like `#ff0` or `ffffff`) or numbers. | ||
```typescript | ||
interface IArgb { | ||
/** | ||
* Gets the alpha value. | ||
*/ | ||
a: number; | ||
/** | ||
* Gets the red value. | ||
*/ | ||
r: number; | ||
/** | ||
* Gets the green value. | ||
*/ | ||
g: number; | ||
/** | ||
* Gets the blue value. | ||
*/ | ||
b: number; | ||
} | ||
``` | ||
Take a look at this [Playground](https://play.nativescript.org/?template=play-js&id=PpA1wb&v=5) for a working example. | ||
### IBitmapData | ||
## API | ||
Used by `toObject()` method. | ||
| Properties | Required | Description | | ||
| --- | --- | --- | | ||
| EventData | Yes | The eventName and object, just like using `notify`. | | ||
| Info | Sometimes | Some of the events _(i.e. `swipe`)_ will need extra information | | ||
```typescript | ||
interface IBitmapData { | ||
/** | ||
* Gets the data as Base64 string. | ||
*/ | ||
base64: string; | ||
### Info | ||
/** | ||
* Gets the mime type. | ||
*/ | ||
mime: string; | ||
} | ||
``` | ||
| Event | Required | Properties | Description | | ||
| --- | --- | --- | --- | | ||
| tap | No | n/a | n/a | | ||
### IFont | ||
Font settings. | ||
```typescript | ||
interface IFont { | ||
/** | ||
* Anti alias or not. | ||
*/ | ||
antiAlias?: boolean; | ||
/** | ||
* Gets the custom forground color. | ||
*/ | ||
color?: string | number | IArgb; | ||
/** | ||
* Gets the name. | ||
*/ | ||
name?: string; | ||
/** | ||
* Gets the size. | ||
*/ | ||
size?: number; | ||
} | ||
``` | ||
### IPoint2D | ||
Coordinates, can also be a string like `0,0` or `150|300`. | ||
```typescript | ||
interface IPoint2D { | ||
/** | ||
* Gets the X coordinate. | ||
*/ | ||
x: number; | ||
/** | ||
* Gets the Y coordinate. | ||
*/ | ||
y: number; | ||
} | ||
``` | ||
### IPoint2D | ||
Size, can also be a string like `0,0` or `150x300`. | ||
```typescript | ||
interface ISize { | ||
/** | ||
* Gets the height. | ||
*/ | ||
height: number; | ||
/** | ||
* Gets the width. | ||
*/ | ||
width: number; | ||
} | ||
``` | ||
### OutputFormat | ||
Supported output formats. | ||
```typescript | ||
enum OutputFormat { | ||
/** | ||
* PNG | ||
*/ | ||
PNG = 1, | ||
/** | ||
* JPEG | ||
*/ | ||
JPEG = 2, | ||
} | ||
``` | ||
### Bitmap | ||
```typescript | ||
interface IBitmap { | ||
/** | ||
* Get the android specific object provided by 'application' module. | ||
*/ | ||
android: AndroidApplication; | ||
/** | ||
* Clones that bitmap. | ||
*/ | ||
clone(): IBitmap; | ||
/** | ||
* Crops that bitmap and returns its copy. | ||
*/ | ||
crop(leftTop?: IPoint2D | string, | ||
size?: ISize | string): IBitmap; | ||
/** | ||
* Gets or sets the default color. | ||
*/ | ||
defaultColor: IPoint2D | string | number; | ||
/** | ||
* Disposes the bitmap. Similar to the IDisposable pattern of .NET Framework. | ||
*/ | ||
dispose<T, TResult>(action?: (bmp: IBitmap, tag?: T) => TResult, | ||
tag?: T): TResult; | ||
/** | ||
* Draws a circle. | ||
*/ | ||
drawCircle(radius?: number, | ||
center?: IPoint2D | string, | ||
color?: string | number | IArgb, fillColor?: string | number | IArgb): IBitmap; | ||
/** | ||
* Draws an arc. | ||
*/ | ||
drawArc(size?: ISize | string, | ||
leftTop?: IPoint2D | string, | ||
startAngle?: number, | ||
sweepAngle?: number, | ||
color?: string | number | IArgb, fillColor?: string | number | IArgb): IBitmap; | ||
/** | ||
* Draws a line. | ||
*/ | ||
drawLine(start: IPoint2D | string, end: IPoint2D | string, | ||
color?: string | number | IArgb): IBitmap; | ||
/** | ||
* Draws an oval circle. | ||
*/ | ||
drawOval(size?: ISize | string, | ||
leftTop?: IPoint2D | string, | ||
color?: string | number | IArgb, fillColor?: string | number | IArgb): IBitmap; | ||
/** | ||
* Draws a rectangle. | ||
*/ | ||
drawRect(size?: ISize | string, | ||
leftTop?: IPoint2D | string, | ||
color?: string | number | IArgb, fillColor?: string | number | IArgb): IBitmap; | ||
/** | ||
* Gets the color of a point. | ||
*/ | ||
getPoint(coordinates?: IPoint2D | string): IArgb; | ||
/** | ||
* Gets the height of the bitmap. | ||
*/ | ||
height: number; | ||
/** | ||
* Get the iOS specific object provided by 'application' module. | ||
*/ | ||
ios: iOSApplication; | ||
/** | ||
* Inserts another image into that bitmap. | ||
*/ | ||
insert(other: any, | ||
leftTop?: IPoint2D | string): IBitmap; | ||
/** | ||
* Gets if the object has been disposed or not. | ||
*/ | ||
isDisposed: boolean; | ||
/** | ||
* Gets the native platform specific object that represents that bitmap. | ||
*/ | ||
nativeObject: any; | ||
/** | ||
* Normalizes a color value. | ||
*/ | ||
normalizeColor(value: string | number | IArgb): IArgb; | ||
/** | ||
* Creates a copy of that bitmap with a new size. | ||
*/ | ||
resize(newSize: ISize | string): IBitmap; | ||
/** | ||
* Resizes that image by defining a new height by keeping ratio. | ||
*/ | ||
resizeHeight(newHeight: number): IBitmap; | ||
/** | ||
* Resizes that image by defining a new (maximum) size by keeping ratio. | ||
*/ | ||
resizeMax(maxSize: number): IBitmap; | ||
/** | ||
* Resizes that image by defining a new width by keeping ratio. | ||
*/ | ||
resizeWidth(newWidth: number): IBitmap; | ||
/** | ||
* Rotates the image. | ||
*/ | ||
rotate(degrees?: number): IBitmap; | ||
/** | ||
* Sets a pixel / point. | ||
*/ | ||
setPoint(coordinates?: IPoint2D | string, | ||
color?: string | number | IArgb): IBitmap; | ||
/** | ||
* Gets the size. | ||
*/ | ||
size: ISize; | ||
/** | ||
* Converts that image to a Base64 string. | ||
*/ | ||
toBase64(format?: OutputFormat, quality?: number): string; | ||
/** | ||
* Converts that image to a data URL. | ||
*/ | ||
toDataUrl(format?: OutputFormat, quality?: number): string; | ||
/** | ||
* Returns that image as ImageSource. | ||
*/ | ||
toImageSource(): ImageSource; | ||
/** | ||
* Converts that image to an object. | ||
*/ | ||
toObject(format?: OutputFormat, quality?: number): IBitmapData; | ||
/** | ||
* Writes a text. | ||
*/ | ||
writeText(txt: any, | ||
leftTop?: IPoint2D | string, font?: IFont | string): IBitmap; | ||
/** | ||
* Gets the width of the bitmap. | ||
*/ | ||
width: number; | ||
} | ||
``` | ||
## Contributors | ||
* [Dimitar Topuzov](https://github.com/dtopuzov) | ||
* [Geoff Bullen](https://github.com/geoffbullen) | ||
* [Jonathan Salomon](https://github.com/abhayastudios) | ||
* [Josh Huckabee](https://github.com/jhuckabee) |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
142025
436