Gets or sets the maximum size of the image of each RasterImageListItem in the control.
public Size ItemImageSize {get; set;}
A System.Drawing.Size structure that specifies the maximum size of the image of each RasterImageListItem in this RasterImageList in pixels.
The ItemImageSize specifies the maximum size of the image of each item in the RasterImageList control. The RasterImageListItem.Image of each image is drawn into the item surface using the maximum size possible of ItemImageSize while maintaining the aspect ratio of the image. If the RasterImageListItem.Image of an item is smaller than ItemImageSize, then no re-sizing is done when the image is drawn. In other words, the RasterImageList control implements a "Fit if larger" drawing algorithm when the item images are painted.
When changing any of the item sizes or styles, you should pay special attention to the values you specify, in general, you should setup ItemSize to be large enough to accommodate ItemImageSize plus room for ItemBorderStyle and ItemImageBorderStyle. If you set the ShowItemText property to true, then you should also accommodate room for the item text in your calculations.
For more information about item appearance, refer to RasterImageList Appearance.
using Leadtools.WinForms;
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Drawing;
class MyForm3 : Form
{
RasterImageList imageList;
RasterCodecs codecs;
public MyForm3(string title)
{
Text = title;
// Set the size of the form
Size = new Size(400, 200);
// Create a new RasterImageList control
imageList = new RasterImageList();
imageList.Dock = DockStyle.Fill;
imageList.SelectionMode = RasterImageListSelectionMode.Single;
imageList.Size = Size;
Controls.Add(imageList);
imageList.BringToFront();
codecs = new RasterCodecs();
// Create three items
string imagesPath = LEAD_VARS.ImagesDir;
for (int i = 0; i < 3; i++)
{
// Load the image
int index = i + 1;
string imageFileName = Path.Combine(imagesPath, @"ImageProcessingDemo\Image" + index.ToString() + ".cmp");
RasterImage image = codecs.Load(imageFileName, 0, CodecsLoadByteOrder.BgrOrGray, 1, 1);
RasterImageListItem item = new RasterImageListItem(image, 1, "Item" + index.ToString());
// Select the first item
if (i == 0)
item.Selected = true;
// Add the item to the image list
imageList.Items.Add(item);
}
// Change the item size
imageList.ItemSize = new Size(200, 200);
// Change the item image size
imageList.ItemImageSize = new Size(120, 120);
// We are going to draw the items ourselves
imageList.ViewStyle = RasterImageListViewStyle.OwnerDraw;
// Add a handler to the DrawItem event
imageList.DrawItem += new EventHandler<RasterImageListDrawItemEventArgs>(rasterImageList_DrawItem);
// Add the RasterImageList to the control collection.
Controls.Add(imageList);
}
private void rasterImageList_DrawItem(object sender, RasterImageListDrawItemEventArgs e)
{
RasterImageListItem item = e.Item;
RasterImageList imageList = item.ImageList;
Graphics g = e.Graphics;
// get the item rectangle
Rectangle rc = imageList.GetItemRectangle(item);
// sanity check
if (rc.IsEmpty)
return;
// we want to draw a 1 pixel black rectangle around the item
// then we fill the inside of the rectangle with white if the item
// is not selected or lightgray if it is
g.DrawRectangle(Pens.Black, rc.Left, rc.Top, rc.Width - 1, rc.Height - 1);
// we used up 1 pixel
rc.Inflate(-1, -1);
Brush b;
if (item.Selected)
b = Brushes.LightGray;
else
b = Brushes.White;
g.FillRectangle(b, rc);
// calculate the rectangles for image and text
if (imageList.ShowItemText)
{
// text is visible
// draw the text at the bottom of the item
int textHeight = (int)(g.MeasureString("WWW", imageList.Font).Height + 4);
Rectangle textRect = Rectangle.FromLTRB(
rc.Left,
rc.Bottom - textHeight,
rc.Right,
rc.Bottom);
if (!textRect.IsEmpty)
{
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
sf.Trimming = StringTrimming.EllipsisPath;
sf.FormatFlags = StringFormatFlags.NoWrap;
g.DrawString(
item.Text,
imageList.Font,
Brushes.Black,
textRect,
sf);
sf.Dispose();
// we need to update the item rectangle for the space
// we used up to draw the text
rc.Height -= textRect.Height;
}
}
// rc is the image rectangle
if (!rc.IsEmpty)
{
// now rc holds the rectangle to draw the image into
// first, set the correct page
int savePage = -1;
if (item.Image.Page != item.Page)
{
// the page is different
// save current image page so we can set it back when we are done
savePage = item.Image.Page;
// disable the image events, we are going to set the page back,
// so we do not want anybody subscribing to this image Changed
// event to know we changed it.
item.Image.DisableEvents();
// set new page
item.Image.Page = item.Page;
}
try
{
// we want to center the image into whatever left of rc
Size itemImageSize = imageList.ItemImageSize;
Rectangle imageRect = new Rectangle(
rc.Left + (rc.Width - itemImageSize.Width) / 2,
rc.Top + (rc.Height - itemImageSize.Height) / 2,
itemImageSize.Width,
itemImageSize.Height);
// we want to keep the aspect ratio
imageRect = RasterImageList.GetFixedAspectRatioImageRectangle(
item.Image.ImageWidth,
item.Image.ImageHeight,
imageRect);
// draw the image
LeadRect lRect = new LeadRect(imageRect.Left, imageRect.Top, imageRect.Width, imageRect.Height);
RasterImagePainter.Paint(item.Image, e.Graphics, lRect, imageList.PaintProperties);
// finally, draw a black rectangle around the image
imageRect.Inflate(1, 1);
g.DrawRectangle(
Pens.Black,
imageRect.Left,
imageRect.Top,
imageRect.Width - 1,
imageRect.Height - 1);
}
finally
{
// reset the old page
if (savePage != -1)
{
item.Image.Page = savePage;
// re-enable the events
item.Image.EnableEvents();
}
}
}
}
}
public void RasterImageList_DrawItem(string title)
{
MyForm3 form = new MyForm3(title);
form.ShowDialog();
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\LEADTOOLS22\Resources\Images";
}