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

Foi útil?

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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top