[CLSCompliantAttribute(false)]
public uint BytesPerLine { get; set; }
This is usually the number of bytes rounded up to a multiple of 4 bytes.
The GDI convention is the number of bytes per line is a multiple of 4 bytes and the extra padding data is unused. But it is possible some cards might not want padding so you can use this property to indicate that. You have to calculate this value from the width of the line that is passed as the second parameter to the RasterImagePaintCallbackFunction.GetDibInfoCallback callback.
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Drawing;
public void RasterPaintPropertiesExample()
{
// Create the form
RasterPaintDibInfo_Example f = new RasterPaintDibInfo_Example();
f.ShowDialog();
}
public void AddCallBack()
{
// Load the image
RasterCodecs codecs = new RasterCodecs();
string srcFileName = Path.Combine(LEAD_VARS.ImagesDir, "Ocr1.tif");
image = codecs.Load(srcFileName);
// Whenever the Leadtools.RasterImage object needs to paint,
// it searches through the RasterPaintProperties.PaintCallbacks list until it finds
// a compatible RasterPaintCallbacks object. If the list is empty or there is no compatible
// RasterPaintCallbacks object, the default paint functions are used.
RasterPaintCallbacks cb = new RasterPaintCallbacks();
cb.SetCallback(RasterImagePaintCallbackFunction.GetDibInfoCallback, DibFunctionDelegate);
props = RasterPaintProperties.Default;
props.PaintDisplayMode = RasterPaintDisplayModeFlags.FastPaint;
props.PaintCallbacks.Add(cb);
props.PaintEngine = RasterPaintEngine.GdiPlus;
}
private object DibFunctionDelegate(RasterImage image, object[] args)
{
// Describe the image data expected by the custom paint callback:
// RasterImagePaintCallbackFunction.GetDibInfoCallback.
//
// Set and use as needed in application, in this case the values are taken from image.
// Then return the updated RasterPaintDibInfo
rasterPaintDibInfo.BitsPerPixel = image.BitsPerPixel;
rasterPaintDibInfo.BytesPerLine = Convert.ToUInt32(image.BytesPerLine);
rasterPaintDibInfo.Flags = RasterPaintDibInfoFlags.LowHighBitValid | RasterPaintDibInfoFlags.IgnoreLut;
rasterPaintDibInfo.Order = RasterByteOrder.Bgr;
rasterPaintDibInfo.ViewPerspective = RasterViewPerspective.RightTop;
return rasterPaintDibInfo;
}
public void RasterImagePainterPaint(PaintEventArgs e)
{
// Draw the image fit and center on this form
LeadRect destRect = LeadRect.FromLTRB(ClientRectangle.Left, ClientRectangle.Top, ClientRectangle.Right, ClientRectangle.Bottom);
destRect = RasterImage.CalculatePaintModeRectangle(
image.ImageWidth,
image.ImageHeight,
destRect,
RasterPaintSizeMode.Fit,
RasterPaintAlignMode.Center,
RasterPaintAlignMode.Center);
RasterImagePainter.Paint(image, e.Graphics, LeadRect.Empty, destRect, props);
}
protected override void OnPaint(PaintEventArgs e)
{
RasterImagePainterPaint(e);
base.OnPaint(e);
}
protected override void OnDoubleClick(EventArgs e)
{
if ((props.PaintDisplayMode & RasterPaintDisplayModeFlags.ScaleToGray) == RasterPaintDisplayModeFlags.ScaleToGray)
{
Text = "Normal - doubleclick to change.";
props.PaintDisplayMode &= ~RasterPaintDisplayModeFlags.ScaleToGray;
}
else
{
Text = "ScaleToGray - doubleclick to change.";
props.PaintDisplayMode |= RasterPaintDisplayModeFlags.ScaleToGray;
}
Invalidate();
base.OnDoubleClick(e);
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images";
}