Ferramenta de zoomer de imagem em c#
-
25-09-2019 - |
Pergunta
Estou tentando fazer um trackbar que irá aumentar e diminuir o zoom em uma foto em uma caixa de imagem. Este é o meu código atual:
namespace Zoom_in_and_Out_Tool
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Image imgOriginal;
private void Form1_Load(object sender, EventArgs e)
{
// set image location
imgOriginal = Image.FromFile(@"C:\New Folder\picture1.jpg");
picBox.Image = imgOriginal;
// set Picture Box Attributes
picBox.BackgroundImageLayout = ImageLayout.Stretch;
// set Slider Attributes
zoomSlider.Minimum = 1;
zoomSlider.Maximum = 5;
zoomSlider.SmallChange = 1;
zoomSlider.LargeChange = 1;
zoomSlider.UseWaitCursor = false;
// reduce flickering
this.DoubleBuffered = true;
}
public Image PictureBoxZoom(Image img, Size size)
{
Bitmap bm = new Bitmap(img, Convert.ToInt32(img.Width * size.Width), Convert.ToInt32(img.Height * size.Height));
Graphics grap = Graphics.FromImage(bm);
grap.InterpolationMode = InterpolationMode.HighQualityBicubic;
return bm;
}
private void zoomSlider_Scroll(object sender, EventArgs e)
{
if (zoomSlider.Value > 0)
{
picBox.Image = null;
picBox.Image = PictureBoxZoom(imgOriginal, new Size(zoomSlider.Value, zoomSlider.Value));
}
}
}
}
Atualmente, ele apresenta 2 problemas. Um ser ele deseja compilar com a linha uva.interpolationMode = interpolationMode.highqualitybicubic; . O segundo problema é que, quando tento ampliar o zoom, ele apresenta o erro: "" argumentException foi ilegal "Erro na linha: bitmap bm = new bitmap (img, convert.toint32 (img.width * size.width), convert .Toint32 (img.Height * size.Height)); "Qualquer ajuda seria ótima,
Obrigado
ATUALIZARO primeiro erro diz: "O nome 'InterpolationMode' não existe no contexto atual" O segundo erro quando comento essa linha é: 'NullReferenceException não foi tratado "Referência de objeto não definida como uma instância de um objeto". Na linha, bitmap bm = novo bitmap (img, convert.toint32 (img.width * size.width), convert.toint32 (img.Height * size.Height));
Obrigado
Solução
Incluir
using System.Drawing.Drawing2D;
na sua lista de uso.
O segundo erro pode ser devido ao img
sendo nulo ou o size
sendo nulo.
Outras dicas
o primeiro O erro do compilador é mais do que provavelmente causado por uma referência desconhecida a InterpolationMode.HighQualityBicubic
. o InterpolationMode
Enumeração é encontrada no Drawing2D
namespace, que é um espaço de nome infantil de System.Drawing
.
Você pode corrigir este erro adicionando um adicional Using
diretiva para System.Drawing.Drawing2D
, ou qualificando totalmente o espaço para nome do seu código:
grap.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic;
o segundo Problema com seu código é que a imagem que você está especificando como um parâmetro para este método (img
) é uma referência nula. o Scroll
O evento do seu slider de zoom provavelmente está sendo aumentado assim que o controle é criado (no construtor do seu formulário), que está antes do código no seu formulário Load
O método é executado, que é o que cria a imagem (carregando -a de um arquivo no disco).
Tente adicionar uma verificação nula ao Scroll
Manipulador de eventos:
private void zoomSlider_Scroll(object sender, EventArgs e)
{
if ((zoomSlider.Value > 0) && (imgOriginal != null))
{
picBox.Image = null;
picBox.Image = PictureBoxZoom(imgOriginal, new Size(zoomSlider.Value, zoomSlider.Value));
}
}
Finalmente, Notei que você está definindo o BackgroundImageLayout
Propriedade da caixa de imagem, mas nenhum código que você publica está realmente especificando uma imagem de fundo para a caixa de imagem. Você quis definir o SizeMode
propriedade Para ajustar como a imagem é exibida? Algo como:
picBox.SizeMode = PictureBoxSizeMode.StretchImage;