---
title: vImage_Buffer
framework: accelerate
role: symbol
role_heading: Structure
path: accelerate/vimage_buffer
---

# vImage_Buffer

An image buffer that stores an image’s pixel data, dimensions, and row stride.

## Declaration

```swift
struct vImage_Buffer
```

## Mentioned in

Enhancing image contrast with histogram manipulation Applying vImage operations to regions of interest Creating and Populating Buffers from Core Graphics Images Building a basic image conversion workflow Building a Basic Image-Processing Workflow Compositing images with vImage blend modes Converting bitmap data between Core Graphics images and vImage buffers

## Overview

Overview The vImage buffer is the fundamental data structure that the vImage library uses to represent image data. To ensure the best performance, the vImage buffer initialization functions may add extra padding to each row. For example, the following code declares an 8-bit per pixel buffer that’s 10 pixels wide: var buffer = vImage_Buffer()

vImageBuffer_Init(&buffer,                   5,    // height                   10,   // width                   8,    // bits per pixel                   vImage_Flags(kvImageNoFlags)) Although the code defines a buffer with 10 bytes per row, to maximize performance, vImageBuffer_Init(_:_:_:_:_:) initializes a buffer with 16 bytes per row:

If you provide your own buffer storage, call preferredAlignmentAndRowBytes(width:height:bitsPerPixel:) to get the row stride that ensures your buffer achieves the best performance. let width = 10 let height = 5

let alignmentAndRowBytes = try vImage_Buffer.preferredAlignmentAndRowBytes(     width: width,     height: height,     bitsPerPixel: 8)

// Prints "16". print(alignmentAndRowBytes.rowBytes)

let data = UnsafeMutableRawPointer.allocate(     byteCount: alignmentAndRowBytes.rowBytes * height,     alignment: alignmentAndRowBytes.alignment)

let buffer = vImage_Buffer(data: data,                            height: vImagePixelCount(height),                            width: vImagePixelCount(width),                            rowBytes: alignmentAndRowBytes.rowBytes)

## Topics

### Creating an empty vImage buffer

- [init(width:height:bitsPerPixel:)](accelerate/vimage_buffer/init(width:height:bitsperpixel:).md)
- [init(size:bitsPerPixel:)](accelerate/vimage_buffer/init(size:bitsperpixel:).md)
- [init()](accelerate/vimage_buffer/init().md)

### Creating a buffer that references existing data

- [init(data:height:width:rowBytes:)](accelerate/vimage_buffer/init(data:height:width:rowbytes:).md)
- [preferredAlignmentAndRowBytes(width:height:bitsPerPixel:)](accelerate/vimage_buffer/preferredalignmentandrowbytes(width:height:bitsperpixel:).md)

### Consuming and producing Core Graphics images

- [init(cgImage:flags:)](accelerate/vimage_buffer/init(cgimage:flags:).md)
- [init(cgImage:format:flags:)](accelerate/vimage_buffer/init(cgimage:format:flags:).md)
- [createCGImage(format:flags:)](accelerate/vimage_buffer/createcgimage(format:flags:).md)

### Inspecting a buffer’s properties

- [data](accelerate/vimage_buffer/data.md)
- [height](accelerate/vimage_buffer/height.md)
- [width](accelerate/vimage_buffer/width.md)
- [size](accelerate/vimage_buffer/size.md)
- [rowBytes](accelerate/vimage_buffer/rowbytes.md)

### Copying a buffer’s contents

- [copy(destinationBuffer:pixelSize:flags:)](accelerate/vimage_buffer/copy(destinationbuffer:pixelsize:flags:).md)

### Deallocating a buffer

- [free()](accelerate/vimage_buffer/free().md)

## Relationships

### Conforms To

- [BitwiseCopyable](swift/bitwisecopyable.md)

## See Also

### Data Types

- [vImagePixelCount](accelerate/vimagepixelcount.md)
- [vImage_AffineTransform](accelerate/vimage_affinetransform.md)
- [vImage_AffineTransform_Double](accelerate/vimage_affinetransform_double.md)
- [vImage_CGAffineTransform](accelerate/vimage_cgaffinetransform.md)
- [vImage_Error](accelerate/vimage_error.md)
- [vImage_Flags](accelerate/vimage_flags.md)
- [GammaFunction](accelerate/gammafunction.md)
- [ResamplingFilter](accelerate/resamplingfilter.md)
