This project has moved. For the latest updates, please go here.

OnImageFileXfer

This operation is used to initiate the transfer of an image from the Source to the application via the disk-file transfer mechanism. It causes the transfer to begin.

Syntax

protected virtual void OnImageFileXfer()

Examples

public abstract class BitmapDataSource:ImageDataSource {
    private Bitmap _currentImage;

    /// <summary>
    /// This operation is used to initiate the transfer of an image from the Source to the application via the
    /// disk-file transfer mechanism. It causes the transfer to begin.
    /// </summary>
    protected override void OnImageFileXfer() {
        using(var _stream=File.Open(this.XferEnvironment.FileXferName,FileMode.Create)) {
            this._currentImage.Save(
                _stream,
                new Dictionary<TwFF,ImageFormat> {
                    {TwFF.Bmp,ImageFormat.Bmp},
                    {TwFF.Exif,ImageFormat.Exif},
                    {TwFF.Jfif,ImageFormat.Jpeg},
                    {TwFF.Png,ImageFormat.Png},
                    {TwFF.Tiff,ImageFormat.Tiff},
                    {TwFF.TiffMulti,ImageFormat.Tiff}
                }[this.XferEnvironment.FileXferFormat]);
        }
    }

    /// <summary>
    /// Invoked to indicate that the Source has data that is ready to be transferred.
    /// </summary>
    protected override void OnXferReady() {
        if(this.XferEnvironment.PendingXfers==0) {
            this.XferEnvironment.PendingXfers=(ushort)Math.Abs((short)this[TwCap.XferCount].Value);
        }
        this._Acquire();

        base.OnXferReady();
    }

    /// <summary>
    /// Invoked at the end of every transfer to signal that the application has received all the data it expected.
    /// </summary>
    protected override void OnEndXfer() {
        this._Dispose();
        if(this.XferEnvironment.PendingXfers>0) {
            this._Acquire();
        }

        base.OnEndXfer();
    }

    /// <summary>
    /// Invoked when the pending transfers discarded.
    /// </summary>
    protected override void OnResetXfer() {
        this._Dispose();

        base.OnResetXfer();
    }

    private void _Dispose() {
        if(this._currentImage!=null) {
            this._currentImage.Dispose();
            this._currentImage=null;
        }
    }

    /// <summary>
    /// Acquire bitmap image.
    /// </summary>
    /// <returns>The bitmap image.</returns>
    protected abstract Bitmap Acquire();

    private void _Acquire() {
        this._BitmapReader=null;
        this._currentImage=this.Acquire();

        #region ImageInfo

        this.XferEnvironment.ImageInfo=new ImageInfo {
            BitsPerPixel=(short)Image.GetPixelFormatSize(this._currentImage.PixelFormat),
            BitsPerSample=new Dictionary<PixelFormat, short[]> {
                {PixelFormat.Format1bppIndexed,new short[] { 1 }},
                {PixelFormat.Format4bppIndexed,new short[] { 4 }},
                {PixelFormat.Format8bppIndexed,new short[] { 8 }},
                {PixelFormat.Format24bppRgb,new short[] { 8, 8, 8 }},
                {PixelFormat.Format48bppRgb,new short[] { 16, 16, 16 }}}[this._currentImage.PixelFormat],
            Compression=TwCompression.None,
            ImageLength=this._currentImage.Height,
            ImageWidth=this._currentImage.Width,
            PixelType=(TwPixelType)this[TwCap.IPixelType].Value,
            Planar=false,
            XResolution=this._currentImage.HorizontalResolution,
            YResolution=this._currentImage.VerticalResolution
        };

        #endregion
    }
}

Last edited Sep 17, 2016 at 7:47 PM by SARAFF, version 2