# BrushFamily

Artifact: [androidx.ink:ink-brush](https://developer.android.com/jetpack/androidx/releases/ink) [View Source](https://cs.android.com/search?q=file:androidx/ink/brush/BrushFamily.kt+class:androidx.ink.brush.BrushFamily) Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/ink#1.0.0)

*** ** * ** ***


```
public final class BrushFamily
```

<br />

*** ** * ** ***

A `https://developer.android.com/reference/androidx/ink/brush/BrushFamily` describes a family of brushes (e.g. "highlighter" or "pressure pen"), irrespective of their size or color. It can be thought of as roughly analogous to a font family.

`https://developer.android.com/reference/androidx/ink/brush/BrushFamily` objects are immutable.

## Summary

| ### Nested types |
|---|
| `public final class https://developer.android.com/reference/androidx/ink/brush/BrushFamily.Builder` Builder for `https://developer.android.com/reference/androidx/ink/brush/BrushFamily`. |
| `public static class https://developer.android.com/reference/androidx/ink/brush/BrushFamily.Companion` |
| `public abstract class https://developer.android.com/reference/androidx/ink/brush/BrushFamily.InputModel` Specifies a model for turning a sequence of raw hardware inputs (e.g. from a stylus, touchscreen, or mouse) into a sequence of smoothed, modeled inputs. |
| `public final class https://developer.android.com/reference/androidx/ink/brush/BrushFamily.InputModel.SlidingWindowModel extends https://developer.android.com/reference/androidx/ink/brush/BrushFamily.InputModel` An `https://developer.android.com/reference/androidx/ink/brush/BrushFamily.InputModel` that averages nearby inputs together within a sliding time window. |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/ink/brush/BrushFamily#BrushFamily(kotlin.collections.List,androidx.ink.brush.BrushFamily.InputModel,kotlin.String)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushCoat> coats, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushFamily.InputModel inputModel, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html developerComment )` Creates a `https://developer.android.com/reference/androidx/ink/brush/BrushFamily` with the given `https://developer.android.com/reference/androidx/ink/brush/BrushCoat`s. |
| `https://developer.android.com/reference/androidx/ink/brush/BrushFamily#BrushFamily(androidx.ink.brush.BrushTip,androidx.ink.brush.BrushPaint,androidx.ink.brush.BrushFamily.InputModel,kotlin.String)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushTip tip, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushPaint paint, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushFamily.InputModel inputModel, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html developerComment )` Creates a `https://developer.android.com/reference/androidx/ink/brush/BrushFamily` with a single `https://developer.android.com/reference/androidx/ink/brush/BrushCoat` that consists of the given `https://developer.android.com/reference/androidx/ink/brush/BrushTip` and `https://developer.android.com/reference/androidx/ink/brush/BrushPaint`. |

| ### Public methods |
|---|---|
| `static final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushFamily.Builder` | `https://developer.android.com/reference/androidx/ink/brush/BrushFamily#builder()()` Returns a new `https://developer.android.com/reference/androidx/ink/brush/BrushFamily.Builder`. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/Version` | `https://developer.android.com/reference/androidx/ink/brush/BrushFamily#calculateMinimumRequiredVersion()()` Returns the minimum required `https://developer.android.com/reference/androidx/ink/brush/Version` for this `https://developer.android.com/reference/androidx/ink/brush/BrushFamily`. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushFamily` | `https://developer.android.com/reference/androidx/ink/brush/BrushFamily#copy(androidx.ink.brush.BrushCoat,androidx.ink.brush.BrushFamily.InputModel,kotlin.String)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushCoat coat, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushFamily.InputModel inputModel, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html developerComment )` Creates a copy of `this` and allows named properties to be altered while keeping the rest unchanged. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushFamily` | `https://developer.android.com/reference/androidx/ink/brush/BrushFamily#copy(kotlin.collections.List,androidx.ink.brush.BrushFamily.InputModel,kotlin.String)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushCoat> coats, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushFamily.InputModel inputModel, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html developerComment )` Creates a copy of `this` and allows named properties to be altered while keeping the rest unchanged. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushFamily` | `https://developer.android.com/reference/androidx/ink/brush/BrushFamily#copy(androidx.ink.brush.BrushTip,androidx.ink.brush.BrushPaint,androidx.ink.brush.BrushFamily.InputModel,kotlin.String)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushTip tip, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushPaint paint, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushFamily.InputModel inputModel, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html developerComment )` Creates a copy of `this` and allows named properties to be altered while keeping the rest unchanged. |
| `boolean` | `https://developer.android.com/reference/androidx/ink/brush/BrushFamily#equals(kotlin.Any)(https://developer.android.com/reference/java/lang/Object.html other)` |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushCoat>` | `https://developer.android.com/reference/androidx/ink/brush/BrushFamily#getCoats()()` An immutable list of the `https://developer.android.com/reference/androidx/ink/brush/BrushCoat`s that make up this `https://developer.android.com/reference/androidx/ink/brush/BrushFamily`. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/ink/brush/BrushFamily#getDeveloperComment()()` A multi-line, human-readable string with a description of the brush and how it works, with the intended audience being designers/developers who are editing the brush definition. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushFamily.InputModel` | `https://developer.android.com/reference/androidx/ink/brush/BrushFamily#getInputModel()()` The `https://developer.android.com/reference/androidx/ink/brush/BrushFamily.InputModel` that will be used by a `https://developer.android.com/reference/androidx/ink/brush/Brush` in this `https://developer.android.com/reference/androidx/ink/brush/BrushFamily`. |
| `final @https://developer.android.com/reference/androidx/annotation/IntRange(from = 0, to = 16777216) long` | `https://developer.android.com/reference/androidx/ink/brush/BrushFamily#getPaintAnimationLoopDurationMillis()()` Returns the duration of a complete paint animation loop for an entire stroke with this brush family (such that each animated paint in the brush goes through an integral number of complete loops and returns to its starting point), or zero if this family contains no animated brush paints. |
| `int` | `https://developer.android.com/reference/androidx/ink/brush/BrushFamily#hashCode()()` |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushFamily.Builder` | `https://developer.android.com/reference/androidx/ink/brush/BrushFamily#toBuilder()()` Returns a `https://developer.android.com/reference/androidx/ink/brush/BrushFamily.Builder` with values set equivalent to `this`. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/ink/brush/BrushFamily#toString()()` |

| ### Extension functions |
|---|---|
| `final void` | `https://developer.android.com/reference/androidx/ink/brush/AndroidBrushFamilyExtensions.https://developer.android.com/reference/androidx/ink/brush/BrushFamily#(androidx.ink.brush.BrushFamily).encode(java.io.OutputStream,androidx.ink.brush.TextureBitmapStore)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushFamily receiver, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/io/OutputStream.html output, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/TextureBitmapStore textureBitmapStore )` Write a gzip-compressed `ink.proto.BrushFamily` binary proto message representing the `https://developer.android.com/reference/androidx/ink/brush/BrushFamily` to the given `https://developer.android.com/reference/java/io/OutputStream.html`. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull byte[]` | `https://developer.android.com/reference/androidx/ink/brush/BrushFamilyExtensions.https://developer.android.com/reference/androidx/ink/brush/BrushFamily#(androidx.ink.brush.BrushFamily).encode(androidx.ink.storage.TexturePngBytesLookup)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushFamily receiver, https://developer.android.com/reference/androidx/ink/storage/TexturePngBytesLookup textureIdToPngBytes )` Write a gzip-compressed `ink.proto.BrushFamily` binary proto message representing the `https://developer.android.com/reference/androidx/ink/brush/BrushFamily` to the given `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte-array/index.html` using the provided callback to retrieve texture PNG bytes. |
| `final void` | `https://developer.android.com/reference/androidx/ink/brush/BrushFamilyExtensions.https://developer.android.com/reference/androidx/ink/brush/BrushFamily#(androidx.ink.brush.BrushFamily).encode(java.io.OutputStream,androidx.ink.storage.TexturePngBytesLookup)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushFamily receiver, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/io/OutputStream.html output, https://developer.android.com/reference/androidx/ink/storage/TexturePngBytesLookup textureIdToPngBytes )` Write a gzip-compressed serialized `ink.proto.BrushFamily` proto message representing the `https://developer.android.com/reference/androidx/ink/brush/BrushFamily` to the given `https://developer.android.com/reference/java/io/OutputStream.html`. |

## Public constructors

### BrushFamily

Added in [1.1.0-alpha11](https://developer.android.com/jetpack/androidx/releases/ink#1.1.0-alpha11)

```
public BrushFamily(
    @NonNull List<@NonNull BrushCoat> coats,
    @NonNull BrushFamily.InputModel inputModel,
    @NonNull String developerComment
)
```

Creates a `https://developer.android.com/reference/androidx/ink/brush/BrushFamily` with the given `https://developer.android.com/reference/androidx/ink/brush/BrushCoat`s.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushCoat> coats` | The `https://developer.android.com/reference/androidx/ink/brush/BrushCoat`s that make up this `https://developer.android.com/reference/androidx/ink/brush/BrushFamily`. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushFamily.InputModel inputModel` | The `https://developer.android.com/reference/androidx/ink/brush/BrushFamily.InputModel` that will be used by a `https://developer.android.com/reference/androidx/ink/brush/Brush` in this `https://developer.android.com/reference/androidx/ink/brush/BrushFamily`. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html developerComment` | A non-user-facing human-readable description of the brush family. |

### BrushFamily

Added in [1.1.0-alpha11](https://developer.android.com/jetpack/androidx/releases/ink#1.1.0-alpha11)

```
public BrushFamily(
    @NonNull BrushTip tip,
    @NonNull BrushPaint paint,
    @NonNull BrushFamily.InputModel inputModel,
    @NonNull String developerComment
)
```

Creates a `https://developer.android.com/reference/androidx/ink/brush/BrushFamily` with a single `https://developer.android.com/reference/androidx/ink/brush/BrushCoat` that consists of the given `https://developer.android.com/reference/androidx/ink/brush/BrushTip` and `https://developer.android.com/reference/androidx/ink/brush/BrushPaint`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushTip tip` | The `https://developer.android.com/reference/androidx/ink/brush/BrushTip` to use in the single `https://developer.android.com/reference/androidx/ink/brush/BrushCoat` for this `https://developer.android.com/reference/androidx/ink/brush/BrushFamily`. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushPaint paint` | The `https://developer.android.com/reference/androidx/ink/brush/BrushPaint` to use in the single `https://developer.android.com/reference/androidx/ink/brush/BrushCoat` for this `https://developer.android.com/reference/androidx/ink/brush/BrushFamily`. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushFamily.InputModel inputModel` | The `https://developer.android.com/reference/androidx/ink/brush/BrushFamily.InputModel` that will be used by a `https://developer.android.com/reference/androidx/ink/brush/Brush` in this `https://developer.android.com/reference/androidx/ink/brush/BrushFamily`. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html developerComment` | A non-user-facing human-readable description of the brush family. |

## Public methods

### builder

Added in [1.1.0-alpha11](https://developer.android.com/jetpack/androidx/releases/ink#1.1.0-alpha11)

```
public static final @NonNull BrushFamily.Builder builder()
```

Returns a new `https://developer.android.com/reference/androidx/ink/brush/BrushFamily.Builder`.

### calculateMinimumRequiredVersion

Added in [1.1.0-alpha11](https://developer.android.com/jetpack/androidx/releases/ink#1.1.0-alpha11)

```
public final @NonNull Version calculateMinimumRequiredVersion()
```

Returns the minimum required `https://developer.android.com/reference/androidx/ink/brush/Version` for this `https://developer.android.com/reference/androidx/ink/brush/BrushFamily`.

By default, decoding a `https://developer.android.com/reference/androidx/ink/brush/BrushFamily` with a minimum required version higher than `https://developer.android.com/reference/androidx/ink/brush/Version#MAX_SUPPORTED()` will fail.

### copy

Added in [1.1.0-alpha11](https://developer.android.com/jetpack/androidx/releases/ink#1.1.0-alpha11)

```
public final @NonNull BrushFamily copy(
    @NonNull BrushCoat coat,
    @NonNull BrushFamily.InputModel inputModel,
    @NonNull String developerComment
)
```

Creates a copy of `this` and allows named properties to be altered while keeping the rest unchanged.

Java callers should use `https://developer.android.com/reference/androidx/ink/brush/BrushFamily.Builder` instead.

### copy

Added in [1.1.0-alpha11](https://developer.android.com/jetpack/androidx/releases/ink#1.1.0-alpha11)

```
public final @NonNull BrushFamily copy(
    @NonNull List<@NonNull BrushCoat> coats,
    @NonNull BrushFamily.InputModel inputModel,
    @NonNull String developerComment
)
```

Creates a copy of `this` and allows named properties to be altered while keeping the rest unchanged.

Java callers should use `https://developer.android.com/reference/androidx/ink/brush/BrushFamily.Builder` instead.

### copy

Added in [1.1.0-alpha11](https://developer.android.com/jetpack/androidx/releases/ink#1.1.0-alpha11)

```
public final @NonNull BrushFamily copy(
    @NonNull BrushTip tip,
    @NonNull BrushPaint paint,
    @NonNull BrushFamily.InputModel inputModel,
    @NonNull String developerComment
)
```

Creates a copy of `this` and allows named properties to be altered while keeping the rest unchanged.

Java callers should use `https://developer.android.com/reference/androidx/ink/brush/BrushFamily.Builder` instead.

### equals

```
public boolean equals(Object other)
```

### getCoats

Added in [1.1.0-alpha11](https://developer.android.com/jetpack/androidx/releases/ink#1.1.0-alpha11)

```
public final @NonNull List<@NonNull BrushCoat> getCoats()
```

An immutable list of the `https://developer.android.com/reference/androidx/ink/brush/BrushCoat`s that make up this `https://developer.android.com/reference/androidx/ink/brush/BrushFamily`.

### getDeveloperComment

Added in [1.1.0-alpha11](https://developer.android.com/jetpack/androidx/releases/ink#1.1.0-alpha11)

```
public final @NonNull String getDeveloperComment()
```

A multi-line, human-readable string with a description of the brush and how it works, with the intended audience being designers/developers who are editing the brush definition. This string is not generally intended to be displayed to end users.

### getInputModel

Added in [1.1.0-alpha11](https://developer.android.com/jetpack/androidx/releases/ink#1.1.0-alpha11)

```
public final @NonNull BrushFamily.InputModel getInputModel()
```

The `https://developer.android.com/reference/androidx/ink/brush/BrushFamily.InputModel` that will be used by a `https://developer.android.com/reference/androidx/ink/brush/Brush` in this `https://developer.android.com/reference/androidx/ink/brush/BrushFamily`.

### getPaintAnimationLoopDurationMillis

Added in [1.1.0-alpha11](https://developer.android.com/jetpack/androidx/releases/ink#1.1.0-alpha11)

```
public final @IntRange(from = 0, to = 16777216) long getPaintAnimationLoopDurationMillis()
```

Returns the duration of a complete paint animation loop for an entire stroke with this brush family (such that each animated paint in the brush goes through an integral number of complete loops and returns to its starting point), or zero if this family contains no animated brush paints. If nonzero, this duration will be no greater than 2\^24 milliseconds (about 4.66 hours).

### hashCode

```
public int hashCode()
```

### toBuilder

Added in [1.1.0-alpha11](https://developer.android.com/jetpack/androidx/releases/ink#1.1.0-alpha11)

```
public final @NonNull BrushFamily.Builder toBuilder()
```

Returns a `https://developer.android.com/reference/androidx/ink/brush/BrushFamily.Builder` with values set equivalent to `this`. Java developers, use the returned builder to build a copy of a BrushFamily.

### toString

```
public @NonNull String toString()
```

## Extension functions

### AndroidBrushFamilyExtensions.encode

Artifact: [androidx.ink:ink-storage](https://developer.android.com/jetpack/androidx/releases/ink) [View Source](https://cs.android.com/search?q=file:androidx/ink/storage/AndroidBrushFamilyExtensions.android.kt+function:encode)

```
public final void AndroidBrushFamilyExtensions.encode(
    @NonNull BrushFamily receiver,
    @NonNull OutputStream output,
    @NonNull TextureBitmapStore textureBitmapStore
)
```

Write a gzip-compressed `ink.proto.BrushFamily` binary proto message representing the `https://developer.android.com/reference/androidx/ink/brush/BrushFamily` to the given `https://developer.android.com/reference/java/io/OutputStream.html`. If `hasFallbacks` is true, then the stored, proto message including fallbacks for this `https://developer.android.com/reference/androidx/ink/brush/BrushFamily` will be used instead of recomputing the proto from the `https://developer.android.com/reference/androidx/ink/brush/BrushFamily` object.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/BrushFamily receiver` | The `https://developer.android.com/reference/androidx/ink/brush/BrushFamily` object to encode. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/io/OutputStream.html output` | The `https://developer.android.com/reference/java/io/OutputStream.html` to write the gzip-compressed encoded bytes to. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/brush/TextureBitmapStore textureBitmapStore` | The `https://developer.android.com/reference/androidx/ink/brush/TextureBitmapStore` to use to encode the texture images within the encoded `https://developer.android.com/reference/androidx/ink/brush/BrushFamily`. If this is not desired behavior, e.g. if the application has a static set of texture images that it includes as resources, then this can be a `https://developer.android.com/reference/androidx/ink/brush/TextureBitmapStore` that always returns `null`. |

### BrushFamilyExtensions.encode

Artifact: [androidx.ink:ink-storage](https://developer.android.com/jetpack/androidx/releases/ink) [View Source](https://cs.android.com/search?q=file:androidx/ink/storage/BrushFamilyExtensions.kt+function:encode)

```
public final @NonNull byte[] BrushFamilyExtensions.encode(
    @NonNull BrushFamily receiver,
    TexturePngBytesLookup textureIdToPngBytes
)
```

Write a gzip-compressed `ink.proto.BrushFamily` binary proto message representing the `https://developer.android.com/reference/androidx/ink/brush/BrushFamily` to the given `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte-array/index.html` using the provided callback to retrieve texture PNG bytes. If `https://developer.android.com/reference/androidx/ink/brush/BrushFamily#hasFallbacks()` is true, then the stored proto message including fallbacks for this `https://developer.android.com/reference/androidx/ink/brush/BrushFamily` will be used instead of recomputing the proto from the `https://developer.android.com/reference/androidx/ink/brush/BrushFamily` object.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/ink/storage/TexturePngBytesLookup textureIdToPngBytes` | A callback to retrieve the PNG bytes of the texture bitmap for a given client texture ID. |

### BrushFamilyExtensions.encode

Artifact: [androidx.ink:ink-storage](https://developer.android.com/jetpack/androidx/releases/ink) [View Source](https://cs.android.com/search?q=file:androidx/ink/storage/BrushFamilyExtensions.jvmAndAndroid.kt+function:encode)

```
public final void BrushFamilyExtensions.encode(
    @NonNull BrushFamily receiver,
    @NonNull OutputStream output,
    TexturePngBytesLookup textureIdToPngBytes
)
```

Write a gzip-compressed serialized `ink.proto.BrushFamily` proto message representing the `https://developer.android.com/reference/androidx/ink/brush/BrushFamily` to the given `https://developer.android.com/reference/java/io/OutputStream.html`. If `https://developer.android.com/reference/androidx/ink/brush/BrushFamily#hasFallbacks()` is true, then the stored proto message including fallbacks for this `https://developer.android.com/reference/androidx/ink/brush/BrushFamily` will be used instead of recomputing the proto from the `https://developer.android.com/reference/androidx/ink/brush/BrushFamily` object.