C# приложение для увеличения/из -за изображения в картинкеC#

Место общения программистов C#
Ответить
Anonymous
 C# приложение для увеличения/из -за изображения в картинке

Сообщение Anonymous »

Я несколько новенький в программировании в целом, но я очень хочу узнать больше, и мне было интересно, может ли кто -нибудь помочь мне с идеей. Размеры 6000x6000 пикселей, Sizemode установил, чтобы увеличить, чтобы все изображение было видно в форме одновременно) в Bivebox, который практически займет всю форму, за исключением места в нижней части формы, где я хочу отобразить трек, который позволит вам увеличить изображение; Помимо горизонтальной полосы прокрутки у основания PictureBox и вертикальной полосы прокрутки на правой стороне Bimobox, чтобы прокручивать карту, когда она увеличивается, и я хотел иметь возможность управлять этими полосами прокрутки, нажимая и перетаскивая в соответствующем направлении (вероятно, не уверен, что это не так уж точно). /> ( reference )

[ Вот моя форма, которая заполнена точно так же, как я описал, с демо -текстурой размещения 6000x6000 - Strong> - это было обработано. />
( addendum < /em> < /strong>) < /p>

Единственная проблема, которая у меня есть, - это код, так как я в значительной степени зеленый рог в этом отделе. Я работал над тем, чтобы выучить рабочий процесс Visual Studio, но я действительно мог бы использовать некоторую помощь. Но моя проблема заключается в том, что когда я слишком далеко поднимаю свое изображение, изображение разрешено, чтобы его можно было натянуть слишком далеко, тем самым выявляя панель за ним, когда изображение панорамирование/вытянуто слишком далеко до одного угла. Кроме того, когда я увеличиваюсь слишком далеко, изображение может стать намного меньше, чем в PictureBox. < /P>

Проблема с панорамированием, серые части панели являются проблемой < /p>

Проблема с масштабированием, серые части панели - это проблема. Я панорамируюсь и увеличиваю, когда мне разрешают плиться или масштабировать за пределами его кадра и выявляю панель позади нее? < /P>

public partial class ImageZoomMainForm : Form
{
Image img;
Point mouseDown;
int startx = 0;
int starty = 0;
int imgx = 0;
int imgy = 0;

bool mousepressed = false;
float zoom = 1;

public ImageZoomMainForm()
{

InitializeComponent();
string imagefilename = @"..\..\ViewPort_MAIN.tif";
img = Image.FromFile(imagefilename);

Graphics g = this.CreateGraphics();

zoom = ((float)pictureBox.Width / (float)img.Width) * (img.HorizontalResolution / g.DpiX);

pictureBox.Paint += new PaintEventHandler(imageBox_Paint);
}

private void pictureBox_MouseMove(object sender, EventArgs e)
{
MouseEventArgs mouse = e as MouseEventArgs;

if (mouse.Button == MouseButtons.Left)
{
Point mousePosNow = mouse.Location;

int deltaX = mousePosNow.X - mouseDown.X;
int deltaY = mousePosNow.Y - mouseDown.Y;

imgx = (int)(startx + (deltaX / zoom));
imgy = (int)(starty + (deltaY / zoom));

pictureBox.Refresh();
}
}

private void imageBox_MouseDown(object sender, EventArgs e)
{
MouseEventArgs mouse = e as MouseEventArgs;

if (mouse.Button == MouseButtons.Left)
{
if (!mousepressed)
{
mousepressed = true;
mouseDown = mouse.Location;
startx = imgx;
starty = imgy;
}
}
}

private void imageBox_MouseUp(object sender, EventArgs e)
{
mousepressed = false;
}

protected override void OnMouseWheel(MouseEventArgs e)
{
float oldzoom = zoom;

if (e.Delta > 0)
{
zoom += 0.1F;
}

else if (e.Delta < 0)
{
zoom = Math.Max(zoom - 0.1F, 0.01F);
}

MouseEventArgs mouse = e as MouseEventArgs;
Point mousePosNow = mouse.Location;

int x = mousePosNow.X - pictureBox.Location.X;
int y = mousePosNow.Y - pictureBox.Location.Y;

int oldimagex = (int)(x / oldzoom);
int oldimagey = (int)(y / oldzoom);

int newimagex = (int)(x / zoom);
int newimagey = (int)(y / zoom);

imgx = newimagex - oldimagex + imgx;
imgy = newimagey - oldimagey + imgy;

pictureBox.Refresh();

}

private void imageBox_Paint(object sender, PaintEventArgs e)
{
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
e.Graphics.ScaleTransform(zoom, zoom);
e.Graphics.DrawImage(img, imgx, imgy);
}

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
const int WM_KEYDOWN = 0x100;
const int WM_SYSKEYDOWN = 0x104;

if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
{
switch (keyData)
{
case Keys.Right:
imgx -= (int)(pictureBox.Width * 0.1F / zoom);
pictureBox.Refresh();
break;

case Keys.Left:
imgx += (int)(pictureBox.Width * 0.1F / zoom);
pictureBox.Refresh();
break;

case Keys.Down:
imgy -= (int)(pictureBox.Height * 0.1F / zoom);
pictureBox.Refresh();
break;

case Keys.Up:
imgy += (int)(pictureBox.Height * 0.1F / zoom);
pictureBox.Refresh();
break;

case Keys.PageDown:
imgy -= (int)(pictureBox.Height * 0.90F / zoom);
pictureBox.Refresh();
break;

case Keys.PageUp:
imgy += (int)(pictureBox.Height * 0.90F / zoom);
pictureBox.Refresh();
break;
}
}

return base.ProcessCmdKey(ref msg, keyData);
}

private void ImageZoomMainForm_Load(object sender, EventArgs e)
{

}
}
< /code>

} < /p>

Подробнее здесь: https://stackoverflow.com/questions/460 ... picturebox
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»