Cyotek.Windows.Forms.ImageBox
Cyotek.Windows.Forms.ImageBox copied to clipboard
Use 2 ImageBoxes side by side
I'd like to use 2 ImageBoxes next to each other in a TableLayoutPanel
If the ZoomChanged event of one of the two images is triggered, the zoom value must be added to the other ImageBox. The same applies to the Scroll event.
Problem: The left image is always fluid, regardless of whether I scroll on this image or on the other, but the right image is always laggy.
I'm guessing this isn't a problem with the ImageBox component but with Windows Form in general, which can't update 2 components at the same time?
Is there nevertheless a workaround?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//Create both bitmaps
//Left
Bitmap left = new Bitmap(3000,3000);
Bitmap right = new Bitmap(3000, 3000);
Graphics g = Graphics.FromImage(left);
//Make light blue / blue pattern
for (int x = 0; x < 3000; x += 500)
{
for (int y = 0; y < 3000; y += 500)
{
g.FillRectangle(Brushes.LightBlue, x, y, 500, 500);
g.FillRectangle(Brushes.Blue, x + 250, y, 250, 250);
g.FillRectangle(Brushes.Blue, x, y + 250, 250, 250);
}
}
//Make light green / green pattern
g = Graphics.FromImage(right);
for (int x = 0; x < 3000; x += 500)
{
for (int y = 0; y < 3000; y += 500)
{
g.FillRectangle(Brushes.LightGreen, x, y, 500, 500);
g.FillRectangle(Brushes.Green, x + 250, y, 250, 250);
g.FillRectangle(Brushes.Green, x, y + 250, 250, 250);
}
}
g.Dispose();
imgBoxLeft.Image = left;
imgBoxRight.Image = right;
}
//Event
private void imgBoxLeft_Scroll(object sender, ScrollEventArgs e)
{
imgBoxRight.ScrollTo(imgBoxLeft.HorizontalScroll.Value, imgBoxLeft.VerticalScroll.Value);
}
private void imgBoxLeft_ZoomChanged(object sender, EventArgs e)
{
imgBoxRight.Zoom = imgBoxLeft.Zoom;
}
private void imgBoxRight_Scroll(object sender, ScrollEventArgs e)
{
imgBoxLeft.ScrollTo(imgBoxRight.HorizontalScroll.Value, imgBoxRight.VerticalScroll.Value);
}
private void imgBoxRight_ZoomChanged(object sender, EventArgs e)
{
imgBoxLeft.Zoom = imgBoxRight.Zoom;
}
}
https://github.com/cyotek/Cyotek.Windows.Forms.ImageBox/assets/150014714/d27ae06b-38b1-490a-a932-eb98f99cb936
If you directly want to test, you can clone the test project: https://github.com/FrancoisBck/DualImageBox/tree/master