GDI+ 如何將圖片繪製成圓形的圖片

大概意思就是不生成新的圖片,而是將圖片轉換爲圓形圖片。

這裏寫圖片描述

實現代碼如下:

private Image CutEllipse(Image img, Rectangle rec, Size size)
{
    Bitmap bitmap = new Bitmap(size.Width, size.Height);
    using (Graphics g = Graphics.FromImage(bitmap))
    {
        using (TextureBrush br = new TextureBrush(img,System.Drawing.Drawing2D.WrapMode.Clamp, rec))
        {
            br.ScaleTransform(bitmap.Width / (float)rec.Width, bitmap.Height / (float)rec.Height);
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            g.FillEllipse(br, new Rectangle(Point.Empty, size));
        }
    }
    return bitmap;
}

然後調用方法即可。

Image image = this.pictureBox1.Image;
Image newImage = CutEllipse(image, new Rectangle(0, 0, 150, 150), new Size(150, 150));
this.pictureBox2.Image = newImage;

那麼用WPF如何實現?實現就更簡單了,不需要寫後臺代碼,直接利用XAML即可。

<Grid>
        <Ellipse Height="150" Width="150">
            <Ellipse.Fill>
                <ImageBrush ImageSource="Image/1_guwei4037.jpg" ></ImageBrush>
            </Ellipse.Fill>
        </Ellipse>
</Grid>

————————————————————————————————————

羣裏的@陳應欽對如上的方法提出一個問題,就是如上的方法圖形的下邊緣和右側邊緣是一條直線,並不是平滑的曲線。細心觀察確實如此。

原因是我畫到了picturebox控件中,本身picturebox控件border就佔長度,正好又畫滿控件,所以右邊和下邊都是直線了(空間不夠了)。

所以解決方案有兩個:可以直接繪製到不佔空間的區域(比如窗體中指定的Rectangle),或者將繪製圖形的長和寬縮小一點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章