IImageSink::BeginSink (Windows CE 5.0)
This method is used to establish a connection between the image source and the sink.
During the call to this method, the source and the sink negotiate the data transfer parameters of their connection.
HRESULT BeginSink( ImageInfo* imageInfo, OPTIONAL RECT* subarea);
Parameters
imageInfo
[in, out] A pointer to an ImageInfo structure used to pass information about the data connection between the source and the sink.When calling the function, set the values in the structure to describe the image data produced by the source.
When the method returns successfully, this structure contains values describing the resulting negotiated image parameters for the connection between the source and the sink.
The following table describes the values returned by IImageSink::BeginSink in the members of imageInfo.
imageInfo Member Contents RawDataFormat This member contains one of the following: If the sink can take raw image data in that format, it contains the file format ID requested by the source.
In this case, the source should then call the IImageSink::PushRawData method to pass raw image data to the sink.
If the sink refuses to take the raw image data from the source, it contains ImageFormatMemoryBMP. For more information about ImageFormatMemoryBMP, see Imaging GUIDs.
In this case, the source should call one of the following methods:
PixelFormatID This member contains the pixel format preferred by the sink. This might or might not be the same format as what was requested by the source. The source can supply pixel data in the format requested by the sink, or it can supply pixel data in one of the canonical pixel formats, which all sinks must support.
Width, Height, Xdpi, Ydpi The contents of these members are normally left unchanged by the sink. However, consider the following: If the source has set the SinkFlagsScalable flag, the sink can modify Width and Height values to request the source to scale the source image to a new dimension.
For more information about SinkFlagsScalable, see SinkFlags.
If the sink changes width and height values, it should change Xdpi and Ydpi values accordingly.
If the source has set the SinkFlagsPartiallyScalable flag, the sink can modify the Width and Height values to tell the source the ideal width and height for the sink.
The source then calls IImageSink::BeginSink again with the closest width and height the source can supply.
When IImageSink::BeginSink is called the second time, the SinkFlagsPartiallyScalable flag is clear.
If the sink doesn't want its BeginSink called twice, it should leave the Width and Height values unchanged and also clear the SinkFlagsPartiallyScalable flag.
TileWidth, TileHeight These members contain the tile dimensions preferred by the sink. If the SinkFlagsFullWidth flag is set, TileWidth must be the same as Width, and TileHeight is the preferred band height.
Tile size information is used as a hint for potential performance gains.
The source is not required to use the exact tile size requested by the sink.
Flags This member contains one or more of the following flags from the SinkFlags enumeration. - SinkFlagsScalable. This flag is left unchanged.
- SinkFlagsPartiallyScalable. See the description for Width and Height.
SinkFlagsHasAlpha. If this flag is set by the source, the sink can clear this flag to indicate that the sink cannot support alpha values.
Even in that case, the source can still supply alpha to the sink.
The sink can do whatever it chooses with the alpha information, which includes discarding it.
- SinkFlagsTopDown. Set to reflect the sink's preference.
SinkFlagsFullWidth. Set by the sink to describe whether the sink wants data in bands.
All sources must support data transfer in top-down banding order, even if that is not their preferred order.
- SinkFlagsBottomUp. This flag is left unchanged.
SinkFlagsMultipass. If this flag is set by the source, the sink can clear this flag to indicate that it does not support multipass.
In that case, the source is required to handle multipass on its own and give image data to the sink in a single pass.
If the sink indicates it can support multipass but also requires top-down order, the source must supply data one entire pass after another. In addition, for each pass it must supply one band after another, with no gaps in between.
- SinkFlagsComposite. This flag is left unchanged. If this flag is set by the source and the sink cannot support compositing behavior, the sink should return a failure from the IImageSink::BeginSink method.
- SinkFlagsWantProps. The sink can set this flag to indicate to the source that it is interested in getting image metadata properties through a call to IImageSink::PushPropertyItems.
subarea
[out] A pointer to a RECT structure.This parameter is used for partial decoding if the image source and sink can support it.
If the image source can support partial image decoding, it should pass a non-NULL subarea parameter. If it does, the image sink must fill in the RECT structure to tell the source which portion of the image to decode.
If the sink does not want a partial image, it fills in the RECT structure to include the entire source image.
Return Values
If successful, this method returns S_OK.
This method may return E_NOTIMPL if it fails.
Remarks
This method negotiates the parameters for sending image data from an image source to an image sink.
Prior to sending data to the sink, you must call IImageSink::SetPalette.
Requirements
OS Versions: Windows CE 5.0 and later.
Header: Imaging.h.
Link Library: Imaging.lib.
See Also
IImageSink | ImageInfo | Imaging GUIDs | IImageSink::PushRawData | IImageSink::PushPixelData | IImageSink::GetPixelDataBuffer | IImageSink::ReleasePixelDataBuffer | SinkFlags | IImageSink::PushPropertyItems | RECT | IImageSink::SetPalette
Send Feedback on this topic to the authors