На форме находится PictureBox, в котором можно перетаскивать изображение путем зажатия левой клавиши мыши, и масштабировать путем прокрутки колесом мыши. Для PictureBox есть Region в форме круга, в котором он отображается. Как я могу получить изображение из этого Region? То есть именно такое изображение, которое я наблюдаю на форме?
Код прилагается:
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
namespace Oncology_Detector
{
public partial class FormMain : Form
{
private Image _sourceImage;
private Bitmap _scaledBitmap;
int _lx, _ly;
int _cx, _cy;
public FormMain()
{
InitializeComponent();
// скругление pbSource
GraphicsPath myPath = new GraphicsPath();
myPath.AddEllipse(0, 0, pbSource.Width, pbSource.Height);
Region myRegion = new Region(myPath);
pbSource.Region = myRegion;
}
private void btnLoadSourceImage_Click(object sender, EventArgs e)
{
if (ofdSourceImage.ShowDialog() != DialogResult.OK)
return;
try
{
_sourceImage = Image.FromFile(ofdSourceImage.FileName);
LoadInitialImage();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void LoadInitialImage()
{
if (_sourceImage != null)
{
int coef = _sourceImage.Width / pbSource.Width / 2;
_scaledBitmap = new Bitmap(_sourceImage, _sourceImage.Width / coef, _sourceImage.Height / coef);
pbSource.Refresh();
}
}
private void pbSource_Paint(object sender, PaintEventArgs e)
{
if (_scaledBitmap != null)
e.Graphics.DrawImageUnscaled(_scaledBitmap, _cx, _cy);
}
private void pbSource_MouseDown(object sender, MouseEventArgs e)
{
_lx = e.X;
_ly = e.Y;
}
private void btnResetScale_Click(object sender, EventArgs e)
{
LoadInitialImage();
}
private void btnCrop_Click(object sender, EventArgs e)
{
}
private void pbSource_MouseMove(object sender, MouseEventArgs e)
{
if (e.X >= pbSource.Location.X && e.X <= pbSource.Location.X + pbSource.Width && e.Y >= pbSource.Location.Y && e.Y <= pbSource.Location.Y + pbSource.Height)
if (pbSource.Capture)
{
int dx = e.X - _lx;
int dy = e.Y - _ly;
_cx += dx;
_cy += dy;
_lx = e.X;
_ly = e.Y;
pbSource.Invalidate();
}
}
private void pbSource_MouseWheel(object sender, MouseEventArgs e)
{
if (_sourceImage != null)
{
int step = e.Delta / 2;
double coef = (_sourceImage.Height + step) * 1.0 / _sourceImage.Height;
int newWidht = (int) (_scaledBitmap.Width * coef);
int newHeight = (int) (_scaledBitmap.Height * coef);
if (newWidht < pbSource.Width || newHeight <= pbSource.Height)
return;
_scaledBitmap = new Bitmap(_sourceImage, newWidht, newHeight);
pbSource.Refresh();
}
}
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте! Возникла следующая проблема: появилась необходимость вызвать функцию из приложения, написанного на С++, путём вызова ее из памяти...
Подскажите, как можно загрузить изображение во vuejs без перезагрузки страницы, то есть только добавляю, и отображает на странице мгновенно
считывание EXIF данный с помощью пакета exifНеобходимо вытащить оттуда только геоданные и по ним разместить фото на карте