Posts com Tags drawing

DrawImage com transparência em GDI+

Para desenhar uma imagem com transparência em GDI+ é necessário aplicar uma transformação de cor. Normalmente, é usado o seguinte código para uma imagem simples:

private void Form1_Paint(object sender, PaintEventArgs e)
{
	e.Graphics.DrawImage(Properties.Resources.image0, new Point(0, 0));
}

Vamos agora criar a transformação de cor. Para isso, usamos a classe ColorMatrix e a classe ImageAttributes. A classe ColorMatrix é composta por uma matriz 4×4 com valores nos quais colocamos as transformações de cor e transparência. Não precisamos nos preocupar com a declaração completa da classe, vamos apenas usar o construtor padrão e alterar o valor de transparência, dessa forma:

ColorMatrix colorMatrix = new ColorMatrix();
colorMatrix.Matrix33 = 0.5f;

O atributo Matrix33 permite alterar a transparência de toda a imagem. Os valores aceitáveis vão de 0.0f (transparente) até 1.0f (opaco). O código completo para desenhar com transparência fica assim:

ColorMatrix colorMatrix = new ColorMatrix();
colorMatrix.Matrix33 = 0.5f;
ImageAttributes imgAttributes = new ImageAttributes();
imgAttributes.SetColorMatrix(colorMatrix);
g.DrawImage(
	Properties.Resources.stay,
	new Rectangle(new Point(0, 0), Properties.Resources.stay.Size),
	0, 0, Properties.Resources.stay.Width, Properties.Resources.stay.Height,
	GraphicsUnit.Pixel,
	imgAttributes);

Tags: , ,

Redimensionar imagem usando Image.GetThumbnailImage

Para alterar o tamanho de uma imagem, automaticamente, em C#, utilize o seguinte código:

Image img = Image.FromFile("original.jpg");
Image miniImg = img.GetThumbnailImage(100, 100, null, IntPtr.Zero);
miniImg.Save("mini.jpg");

Na linha 1 a imagem original é carregada. Na linha 2, a imagem de tamanho 100×100 é gerada automaticamente, a partir da imagem original carregada. Na linha 3, a miniatura é salva.

Você pode gerar uma redução proporcional, alterando o código da seguinte forma:

Image img = Image.FromFile("original.jpg");
int fator;
if (img.Width > img.Height)
    fator = 100 / img.Width;
else
    fator = 100 / img.Height;
Image miniImg = img.GetThumbnailImage(img.Width * fator, img.Height * fator, null, IntPtr.Zero);
miniImg.Save("mini.jpg");

Na linha 3, verifica-se qual dimensão é maior (horizontal ou vertical) e dividimos o valor 100 (tamanho máximo) pela maior dimensão. Assim, na linha 7, multiplicamos o fator pelas dimensões. Um modo resumido de escrever o código acima é assim:

Image img = Image.FromFile("original.jpg");
int fator = 100 / (img.Width > img.Height ? img.Width : img.Height);
Image miniImg = img.GetThumbnailImage(img.Width * fator, img.Height * fator, null, IntPtr.Zero);
miniImg.Save("mini.jpg");

Tags: ,

Tamanho errado da imagem no Graphics.DrawImage

Quando a resolução da imagem for diferente da resolução configurada pelo computador, o método “Graphics.DrawImage(Image image, Point point)” irá desenha uma imagem com tamanho diferente do desejado. Para solucionar o problema, utilize o método “Graphics.DrawImage(Image image, Rectangle rectangle)“, com os pontos iniciais de posicionamento e o tamanho da imagem. O código final é algo assim:

Graphics g = e.Graphics;
Image i = Image.FromFile("file.png");
g.DrawImage(i, new Rectangle(0, 0, i.Width, i.Height);

Tags: , ,