using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
namespace UtilidadesCSharp.Imagen
{
public enum SizeMode
{
Scrollable,
RatioStretch
}
///
/// Summary description for Viewer.
///
public class Imagen : System.Windows.Forms.UserControl
{
private System.Windows.Forms.PictureBox pictureBox1;
private System.ComponentModel.IContainer components;
private SizeMode sizeMode;
public Imagen()
{
// This call is required by the Windows.Forms Form Designer.
InitializeComponent();
this.ImageSizeMode = SizeMode.RatioStretch;
}
///
/// Clean up any resources being used.
///
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
public Image Image
{
get { return this.pictureBox1.Image; }
set
{
this.pictureBox1.Image = value;
this.SetLayout();
//this.ChangeSize();
}
}
public SizeMode ImageSizeMode
{
get { return this.sizeMode; }
set
{
this.sizeMode = value;
this.AutoScroll = (this.sizeMode == SizeMode.Scrollable);
this.SetLayout();
}
}
private void RatioStretch()
{
float pRatio = (float)this.Width / this.Height;
float imRatio = (float)this.pictureBox1.Image.Width / this.pictureBox1.Image.Height;
if (this.Width >= this.pictureBox1.Image.Width && this.Height >= this.pictureBox1.Image.Height)
{
this.pictureBox1.Width = this.pictureBox1.Image.Width;
this.pictureBox1.Height = this.pictureBox1.Image.Height;
}
else if (this.Width > this.pictureBox1.Image.Width && this.Height < this.pictureBox1.Image.Height)
{
this.pictureBox1.Height = this.Height;
this.pictureBox1.Width = (int)(this.Height * imRatio);
}
else if (this.Width < this.pictureBox1.Image.Width && this.Height > this.pictureBox1.Image.Height)
{
this.pictureBox1.Width = this.Width;
this.pictureBox1.Height = (int)(this.Width / imRatio);
}
else if (this.Width < this.pictureBox1.Image.Width && this.Height < this.pictureBox1.Image.Height)
{
if (this.Width >= this.Height)
{
//width image
if (this.pictureBox1.Image.Width >= this.pictureBox1.Image.Height && imRatio >= pRatio)
{
this.pictureBox1.Width = this.Width;
this.pictureBox1.Height = (int)(this.Width / imRatio);
}
else
{
this.pictureBox1.Height = this.Height;
this.pictureBox1.Width = (int)(this.Height * imRatio);
}
}
else
{
//width image
if (this.pictureBox1.Image.Width < this.pictureBox1.Image.Height && imRatio < pRatio)
{
this.pictureBox1.Height = this.Height;
this.pictureBox1.Width = (int)(this.Height * imRatio);
}
else // height image
{
this.pictureBox1.Width = this.Width;
this.pictureBox1.Height = (int)(this.Width / imRatio);
}
}
}
this.CenterImage();
}
private void Scrollable()
{
this.pictureBox1.Width = this.pictureBox1.Image.Width;
this.pictureBox1.Height = this.pictureBox1.Image.Height;
this.CenterImage();
}
private void SetLayout()
{
if (this.pictureBox1.Image == null)
return;
if (this.sizeMode == SizeMode.RatioStretch)
this.RatioStretch();
else
{
this.AutoScroll = false;
this.Scrollable();
this.AutoScroll = true;
}
}
private void CenterImage()
{
int top = (int)((this.Height - this.pictureBox1.Height) / 2.0);
int left = (int)((this.Width - this.pictureBox1.Width) / 2.0);
if (top < 0)
top = 0;
if (left < 0)
left = 0;
this.pictureBox1.Top = top;
this.pictureBox1.Left = left;
}
#region Component Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
this.pictureBox1 = new System.Windows.Forms.PictureBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// pictureBox1
//
this.pictureBox1.BackColor = System.Drawing.Color.Transparent;
this.pictureBox1.Cursor = System.Windows.Forms.Cursors.Default;
this.pictureBox1.Location = new System.Drawing.Point(24, 32);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(296, 208);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
//
// Imagen
//
this.AutoScroll = true;
this.BackColor = System.Drawing.Color.Transparent;
this.Controls.Add(this.pictureBox1);
this.Name = "Imagen";
this.Size = new System.Drawing.Size(352, 272);
this.Load += new System.EventHandler(this.Viewer_Load);
this.Resize += new System.EventHandler(this.Viewer_Resize);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
}
#endregion
private void Viewer_Load(object sender, System.EventArgs e)
{
this.pictureBox1.Width = 0;
this.pictureBox1.Height = 0;
this.SetLayout();
}
private void Viewer_Resize(object sender, System.EventArgs e)
{
this.SetLayout();
}
}
}