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?
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