Foxtable(狐表)用户栏目专家坐堂 → [讨论] FB如何让头像变灰?


  共有8395人关注过本帖树形打印复制链接

主题:[讨论] FB如何让头像变灰?

帅哥哟,离线,有人找我吗?
don
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
[讨论] FB如何让头像变灰?  发帖心情 Post By:2013/5/7 11:12:00 [只看该作者]

百度来的头像变灰的方法,请高手转为FB可用的代码:

一.
procedure Gray(bmp: TBitmap);
var
  p: PByteArray;
  w: Integer;
  i, j: Integer;
begin
  bmp.pixelformat := pf24bit;
  for i := 0 to bmp.height - 1 do
  begin
    p := bmp.scanline[i];
    j := 0;
    while j < (bmp.width-1) * 3 do
    begin
      w :=(p[j] * 28 + p[j+1] * 151 + p[j+2]*77);
      w := w shr 8;
      p[j] := byte(w);
      p[j+1] := byte(w);
      p[j+2] := byte(w);
      inc(j, 3)
    end;
  end;
end;


二. 微软做好的,GDI+绘制代码:

Graphics graphics(hdc);
            Image myImage(L"Image.jpg");
            RectF source(0.0f, 0.0f, 330.0f, 300.0f);
            RectF destination(20.0f, 20.0f, 330.0f, 300.0f);
 
            DrawImage(graphics, &myImage, destination, source, UnitPixel, NULL); // 绘制原始图像
             
            RectF destination2(420.0f, 20.0f, 330.0f, 300.0f);
 
#define GRAY        32/256.0f    /* gray/full, 0 - 256 : black to white, 16 - 64 is recommended */
#define GRAY        0.125f        /* 0.000 - 1.000 : black to white, 0.062 - 0.250 is recommended */
#define FULL        1.000f
#define ZERO        0.000f
 
                        // 自由转换
            ColorMatrix matrix = {
                GRAY, GRAY, GRAY, FULL, ZERO, 
                GRAY, GRAY, GRAY, FULL, ZERO, 
                GRAY, GRAY, GRAY, FULL, ZERO, 
                GRAY, GRAY, GRAY, FULL, ZERO, 
                ZERO, ZERO, ZERO, ZERO, FULL, 
            };
 
            ImageAttributes attributes;
            attributes.SetColorMatrix(&matrix);
            DrawImage(graphics, &myImage, destination2, source, UnitPixel, &attributes); // 绘制转换图像



DrawImage 是自定义函数


C/C++ code


void DrawImage(Graphics& graphics, Image* image, RectF& destination, RectF& source, Unit unit, ImageAttributes* attributes)
{
    graphics.DrawImage(image, destination, source.X, source.Y, source.Width, source.Height, unit, attributes);
}



 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/5/7 11:57:00 [只看该作者]

全局的apI 通不过哦


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/5/7 12:02:00 [只看该作者]

 Windows.Forms.ControlPaint.DrawImageDisabled(Graphics.FromImage(图像), 图像, 0, 0, Color.Transparent) 直接使用这段代码就可以的了.

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/5/7 12:22:00 [只看该作者]

如果希望用代码实现,(可控性比较高) 可以参考我的代码. 可以实现任意灰度,反色 颜色修改等.

Dim SImage As Image = Image.FromFile("C:\Users\foxtable1\Desktop\70b70d98-1228-4487-93a5-6f7056628d00.jpg")
Dim Height As Integer = SImage.Height
Dim Width  As Integer = SImage.Width
Dim bitmap As Bitmap = new Bitmap(Width, Height)
Dim MyBitmap As Bitmap= SImage
Dim pixel As Color
For  x As Integer = 0 To Width-1
    For  y As Integer = 0 To Height-1
        pixel = MyBitmap.GetPixel(x, y)
        Dim r As Integer = 0
        Dim g As Integer = 0
        Dim b As Integer = 0
        Dim Result As Integer = 0
        r = pixel.R
        g = pixel.G
        b = pixel.B
        Dim iType As Integer = 2
        Select Case iType
            Case 0 '平均值法
                Result = ((r + g + b) / 3)
            Case 1 '最大值法
                Result = IIF(r > g ,r , g)
                Result = IIF(Result > b,Result,b)
            Case 2 '加权平均值法
                Result = ((0.7 * r) + (0.2 * g) + (0.1 * b))
        End Select
        bitmap.SetPixel(x, y, Color.FromArgb(Result, Result, Result))
    Next
Next
bitmap.Save("C:\Users\foxtable1\Desktop\28d00.jpg")

 回到顶部
帅哥哟,离线,有人找我吗?
qq121454970
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:880 积分:9011 威望:0 精华:3 注册:2012/4/22 18:06:00
  发帖心情 Post By:2013/5/7 12:24:00 [只看该作者]

高手图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
hanxuntx
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2609 积分:16926 威望:0 精华:11 注册:2011/9/20 16:13:00
  发帖心情 Post By:2013/5/7 12:28:00 [只看该作者]

好贴收藏


 回到顶部
帅哥哟,离线,有人找我吗?
don
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2013/5/7 12:29:00 [只看该作者]

高手动手了,学习!

 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  8楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/5/7 12:37:00 [只看该作者]

保留着  学习

 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  9楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/5/7 13:08:00 [只看该作者]

Windows.Forms.ControlPaint.DrawImageDisabled(Graphics.FromImage(图像), 图像, 0, 0, Color.Transparent)

完整的语法是怎样的?

 回到顶部
帅哥哟,离线,有人找我吗?
don
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2013/5/7 13:28:00 [只看该作者]

同问,不知如何设置保存位置 ,

Dim SImage As Image = Image.FromFile("D:\8d00.jpg")
Dim bcmage As Image = Image.SaveFile("D:\800.jpg")   ' Image.SaveFile报错


 回到顶部
总数 16 1 2 下一页