graphics.DrawImage 没有这种功能

解决方案 »

  1.   

    难道要自己修改图片矩阵数据中的Alpha值?有其他方法吗?
      

  2.   


    不好意思,好像Status DrawImage(          Image *image,
        const Rect &destRect,
        INT srcx,
        INT srcy,
        INT srcwidth,
        INT srcheight,
        Unit srcUnit,
        ImageAttributes *imageAttributes,
        DrawImageAbort callback,
        VOID *callbackData
    );
    这个函数可以实现
    /// 设置图片的透明度  
           /// </summary>  
           /// <param name="image">原图</param>  
           /// <param name="alpha">透明度0-255</param>  
           /// <returns></returns>  
           private Bitmap SetPictureAlpha(Image image,int alpha)  
           {  
               //颜色矩阵  
               float[][] matrixItems =  
               {  
                   new float[]{1,0,0,0,0},  
                   new float[]{0,1,0,0,0},  
                   new float[]{0,0,1,0,0},  
                   new float[]{0,0,0,alpha/255f,0},  
                   new float[]{0,0,0,0,1}  
               };  
               ColorMatrix colorMatrix = new ColorMatrix(matrixItems);  
               ImageAttributes imageAtt = new ImageAttributes();  
               imageAtt.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);  
               Bitmap bmp = new Bitmap(image.Width, image.Height);  
               Graphics g = Graphics.FromImage(bmp);  
               g.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height),  
                       0, 0, image.Width, image.Height, GraphicsUnit.Pixel, imageAtt);  
               g.Dispose();  
      
               return bmp;  
           }  
      

  3.   

    那个矩阵变换的原理,你理解么?能不能解释下?
    不好意思,好像Status DrawImage(          Image *image,
        const Rect &destRect,
        INT srcx,
        INT srcy,
        INT srcwidth,
        INT srcheight,
        Unit srcUnit,
        ImageAttributes *imageAttributes,
        DrawImageAbort callback,
        VOID *callbackData
    );
    这个函数可以实现
    /// 设置图片的透明度  
           /// </summary>  
           /// <param name="image">原图</param>  
           /// <param name="alpha">透明度0-255</param>  
           /// <returns></returns>  
           private Bitmap SetPictureAlpha(Image image,int alpha)  
           {  
               //颜色矩阵  
               float[][] matrixItems =  
               {  
                   new float[]{1,0,0,0,0},  
                   new float[]{0,1,0,0,0},  
                   new float[]{0,0,1,0,0},  
                   new float[]{0,0,0,alpha/255f,0},  
                   new float[]{0,0,0,0,1}  
               };  
               ColorMatrix colorMatrix = new ColorMatrix(matrixItems);  
               ImageAttributes imageAtt = new ImageAttributes();  
               imageAtt.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);  
               Bitmap bmp = new Bitmap(image.Width, image.Height);  
               Graphics g = Graphics.FromImage(bmp);  
               g.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height),  
                       0, 0, image.Width, image.Height, GraphicsUnit.Pixel, imageAtt);  
               g.Dispose();  
      
               return bmp;  
           }