Pergunta

Eu estou fazendo uma espécie de limitada editor de elementos gráficos em um aplicativo de desktop em c# 3.5 GDI.o usuário seleciona uma imagem que é mostrada em um controle picturebox, que é menor em tamanho para redimensionamento de imagens é feito para ajustar a imagem.

Para a corte, o usuário seleciona a área a cortar.há uma série de exemplo na net que explica como cortar a imagem, mas nenhum deles explica o que acontece quando a área estiver selecionada na imagem, mas o corte é feito sobre a imagem original é.algum tipo de mapeamento é feito entre as duas imagens.

tudo o editor gráfico fornecer funcionalidade semelhante.você pode me indicar um link que explica como fazer isso?

Foi útil?

Solução

Soa-me como você precisa calcular o retângulo de corte no original imagem de si mesmo com base no tamanho relativo da imagem e a miniatura.

public static class CoordinateTransformationHelper
{
    public static Point ThumbToOriginal(this Point point, Size thumb, Size source)
    {
        Point rc = new Point();
        rc.X = (int)((double)point.X / thumb.Width * source.Width);
        rc.Y = (int)((double)point.Y / thumb.Height * source.Height);
        return rc;
    }

    public static Size ThumbToOriginal(this Size size, Size thumb, Size source)
    {
        Point pt = new Point(size);
        Size rc = new Size(pt.ThumbToOriginal(thumb, source));
        return rc;
    }

    public static Rectangle ThumbToOriginal(this Rectangle rect, Size thumb, Size source)
    {
        Rectangle rc = new Rectangle();
        rc.Location = rect.Location.ThumbToOriginal(thumb, source);
        rc.Size = rect.Size.ThumbToOriginal(thumb, source);
        return rc;
    }
}

Exemplo de utilização:

Size thumb = new Size(10, 10);
Size source = new Size(100, 100);
Console.WriteLine(new Point(4, 4).ThumbToOriginal(thumb, source));
Console.WriteLine(new Rectangle(4, 4, 5, 5).ThumbToOriginal(thumb, source));

Outras dicas

Aqui está um método muito fácil de cortar um sistema.drawing.image

public static Image CropImage(Image image, Rectangle area)
{
    Image cropped = null;

    using (Bitmap i = new Bitmap(image))
    using (Bitmap c = i.Clone(area, i.PixelFormat))
        cropped = (Image)c;

    return cropped;
}

passe em uma imagem e na área que você deseja cortar e isso deve fazê -lo

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top