如何调整bmp图形亮度,答得好的有50分

解决方案 »

  1.   

    procedure BrightnessChange(const SrcBmp,DestBmp:TBitmap;ValueChange:integer);
    function Min(a, b: integer): integer;
    begin
      if a < b then
        result := a
      else
        result := b;
    end;function Max(a, b: integer): integer;
    begin
      if a > b then
        result := a
      else
        result := b;
    end;
    var
      i, j: integer;
      SrcRGB, DestRGB: pRGBTriple;
    begin
      for i := 0 to SrcBmp.Height - 1 do
      begin
        SrcRGB := SrcBmp.ScanLine[i];
        DestRGB := DestBmp.ScanLine[i];
        for j := 0 to SrcBmp.Width - 1 do
        begin
          if ValueChange > 0 then
          begin
            DestRGB.rgbtRed := Min(255, SrcRGB.rgbtRed + ValueChange);
            DestRGB.rgbtGreen := Min(255, SrcRGB.rgbtGreen + ValueChange);
            DestRGB.rgbtBlue := Min(255, SrcRGB.rgbtBlue + ValueChange);
          end else begin
            DestRGB.rgbtRed := Max(0, SrcRGB.rgbtRed + ValueChange);
            DestRGB.rgbtGreen := Max(0, SrcRGB.rgbtGreen + ValueChange);
            DestRGB.rgbtBlue := Max(0, SrcRGB.rgbtBlue + ValueChange);
          end;
          Inc(SrcRGB);
          Inc(DestRGB);
        end;
      end;
    end;
    以上程序100%可以通过调试,信誉第一,请楼主结帐!
      

  2.   

    DestRGB.rgbtRed := Min(255, SrcRGB.rgbtRed + ValueChange);
            DestRGB.rgbtGreen := Min(255, SrcRGB.rgbtGreen + ValueChange);
            DestRGB.rgbtBlue := Min(255, SrcRGB.rgbtBlue + ValueChange);
    有专门的GAMMA调整的,有的显示屏上还有呢。
    上面这种算法不是最好的。而且也不光是这种算法。GAMMA值一般是由三个参数组成的。
    有的可以不同的颜色乘以不同的参数(因为不同颜色在人眼中的亮度是不一样的)
    好的算法是先用3个255数组(将GAMMA化后的数字填入),然后根据原来的rgb查出新的RGB就可以了,比楼上的这位似乎算法稍微好一点。
      

  3.   

    这代码好熟读啊,怎么像我写的?楼主抬头看公告栏:http://expert.csdn.net/Expert/TopicView1.asp?id=1472478我没系统学过图形学,像sevencat学习
      

  4.   

    Brightness是在DELPHI6中的,还是自定的
      

  5.   

    codeproject上面有个例子的,只不过是C++的
      

  6.   

    是ehom(?!) 写的,但人家说答对有分,所以我就COPY过来啦。不过楼主好像没有结帖的意思。
      

  7.   

    Brightness是在DELPHI6中的,还是delphi5中的,还是自定义的过程;