// ###############################################################
// Copyright(c) Carl Zeiss AG, Germany. All Rights Reserved.
//
// Permission is granted to use and distribute this code,
// as long as this copyright notice remains part of the code.
// ###############################################################

syntax = "proto3";
package zen_api.acquisition.v1beta;
import "zen_api/acquisition/v1beta/pixel_type.proto";
import "zen_api/common/v1/int_point.proto";
import "zen_api/common/v1/int_size.proto";

// A simple container for the frame pixel data. This can contain either the pixels of a full
// frame or only a part of it (e.g., a line or a rectangle in case of partial acquisition when
// working with EM and LSM).
message FramePixelData {
   // The start position (in pixels) of the pixel data in the frame.
   // Together with the size property, this represents the rectangle where the pixels are
   // located inside the full frame. For ordinary acquisition this will be the top left corner
   // of the frame, but for partial acquisition this can be any position inside the full frame
   // relative to the top left corner.
   .zen_api.common.v1.IntPoint start_position = 1;
   // Size (in pixels) of the pixel data.
   // Together with the start position property, this represents the rectangle where the
   // pixels are located inside the full frame. For ordinary acquisition this will be the full
   // frame size, but for partial acquisition this can be just one part of the full frame.
   .zen_api.common.v1.IntSize size = 2;
   // The pixel type of the frame.
   PixelType pixel_type = 3;
   // The raw pixel data.
   // The value of individual pixels is contained in this container. The pixel values need to
   // be extracted from the raw byte data. The number of bits needed to extract a single pixel
   // from the raw byte data and the format it is stored in is determined by the pixel type
   // property.
   bytes raw_data = 4;
}
