Я несколько новенький в программировании в целом, но я очень хочу узнать больше, и мне было интересно, может ли кто -нибудь помочь мне с идеей. Размеры 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
C# приложение для увеличения/из -за изображения в картинке ⇐ C#
Место общения программистов C#
-
Anonymous
1751965485
Anonymous
Я несколько новенький в программировании в целом, но я очень хочу узнать больше, и мне было интересно, может ли кто -нибудь помочь мне с идеей. Размеры 6000x6000 пикселей, Sizemode установил, чтобы увеличить, чтобы все изображение было видно в форме одновременно) в Bivebox, который практически займет всю форму, за исключением места в нижней части формы, где я хочу отобразить трек, который позволит вам увеличить изображение; Помимо горизонтальной полосы прокрутки у основания PictureBox и вертикальной полосы прокрутки на правой стороне Bimobox, чтобы прокручивать карту, когда она увеличивается, и я хотел иметь возможность управлять этими полосами прокрутки, нажимая и перетаскивая в соответствующем направлении (вероятно, не уверен, что это не так уж точно). /> ([b] reference [/b])
[ Вот моя форма, которая заполнена точно так же, как я описал, с демо -текстурой размещения 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>
Подробнее здесь: [url]https://stackoverflow.com/questions/46066418/c-sharp-application-to-zoom-in-out-the-image-in-a-picturebox[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия