亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ggraphiccolor.pas

?? [原創(chuàng)]這是我寫的一個圖像組件!組件中使用了GraphicEx庫
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
//----------------------------------------------------------------------------------------------------------------------

function TColorManager.ComponentGammaConvert(Value: Byte): Byte;

begin
  Result := FGammaTable[Value];
end;

//----------------------------------------------------------------------------------------------------------------------

function TColorManager.ComponentScaleConvert(Value: Word): Byte;

begin
  Result := MulDiv16(Value, 255, 65535);
end;

//----------------------------------------------------------------------------------------------------------------------

function TColorManager.ComponentScaleGammaConvert(Value: Word): Byte;

begin
  Result := FGammaTable[MulDiv16(Value, 255, 65535)];
end;

//----------------------------------------------------------------------------------------------------------------------

function TColorManager.ComponentSwapScaleGammaConvert(Value: Word): Byte;

begin
  Result := FGammaTable[MulDiv16(Swap(Value), 255, 65535)];
end;

//----------------------------------------------------------------------------------------------------------------------

function TColorManager.ComponentSwapScaleConvert(Value: Word): Byte;

begin
  Result := MulDiv16(Swap(Value), 255, 65535);
end;

//----------------------------------------------------------------------------------------------------------------------

function TColorManager.ComponentSwapConvert(Value: Word): Word;

begin
  Result := Swap(Value);
end;

//----------------- row conversion routines ----------------------------------------------------------------------------

// Notes: Each method takes parameters for source and target data as well as the count of pixels to work on. This count
//        determines the number of pixels in the target buffer. The actual source count may differ for special color
//        schemes (like YCbCr) or interlaced lines.
//        Mask is a parameter which determines (in a repeative manner) which source pixel should actually be transferred
//        to the target buffer. A 1 in the corresponding bit (MSB is leftmost pixel) causes the transfer to happen.
//        Usually, this parameter is $FF to transfer all pixels, but for interlaced images (e.g. as in PNG format)
//        this will differ to limit pixel transfers. The bit mask only describes which target pixel is to skip. Source
//        pixel must be packed.
//        Windows DIBs are always byte aligned, so we don't need checks for byte alignments (in target).

procedure TColorManager.RowConvertBGR2BGR(Source: array of Pointer; Target: Pointer; Count: Cardinal; Mask: Byte);

// same as ConvertBGR2RGB but for BGR target schemes

var
  SourceR16,
  SourceG16,
  SourceB16,
  SourceA16: PWord;

  SourceR8,
  SourceG8,
  SourceB8,
  SourceA8: PByte;

  TargetRun16: PBGR16;
  TargetRunA16: PBGRA16;
  TargetRun8: PBGR;
  TargetRunA8: PBGRA;
  BitRun: Byte;

  Convert8_8: function(Value: Byte): Byte of object;
  Convert16_8: function(Value: Word): Byte of object;
  Convert16_8Alpha: function(Value: Word): Byte of object;
  Convert16_16: function(Value: Word): Word of object;

  SourceIncrement,
  TargetIncrement: Cardinal;
  CopyAlpha: Boolean;

begin
  BitRun := $80;
  // determine alpha handling once
  CopyAlpha := False;
  if coAlpha in FSourceOptions then
  begin
    SourceIncrement := SizeOf(TRGBA);
    TargetIncrement := SizeOf(TRGB);
    if coAlpha in FTargetOptions then CopyAlpha := True;
  end
  else
  begin
    SourceIncrement := SizeOf(TRGB);
    if coAlpha in FTargetOptions then TargetIncrement := SizeOf(TRGBA)
                                 else TargetIncrement := SizeOf(TRGB);
  end;
  // in planar mode source increment is always 1
  if Length(Source) > 1 then SourceIncrement := 1;

  case FSourceBPS of
    8:
      begin
        if Length(Source) = 1 then
        begin
          // interleaved mode
          SourceB8 := Source[0];
          SourceG8 := SourceB8; Inc(SourceG8);
          SourceR8 := SourceG8; Inc(SourceR8);
          SourceA8 := SourceR8; Inc(SourceA8);
        end
        else
        begin
          SourceB8 := Source[0];
          SourceG8 := Source[1];
          SourceR8 := Source[2];
          if coAlpha in FSourceOptions then SourceA8 := Source[3]
                                       else SourceA8 := nil;
        end;

        case FTargetBPS of
          8: // 888 to 888
            begin
              if coApplyGamma in FTargetOptions then Convert8_8 := ComponentGammaConvert
                                                else Convert8_8 := ComponentNoConvert8;
              if CopyAlpha then
              begin
                TargetRunA8 := Target;
                while Count > 0 do
                begin
                  if Boolean(Mask and BitRun) then
                  begin
                    TargetRunA8.R := Convert8_8(SourceR8^);
                    TargetRunA8.G := Convert8_8(SourceG8^);
                    TargetRunA8.B := Convert8_8(SourceB8^);
                    // alpha values are never gamma corrected
                    TargetRunA8.A := SourceA8^;
                  
                    Inc(SourceB8, SourceIncrement);
                    Inc(SourceG8, SourceIncrement);
                    Inc(SourceR8, SourceIncrement);
                    Inc(SourceA8, SourceIncrement);
                  end;
                  asm ROR BYTE PTR [BitRun], 1 end;
                  Dec(Count);
                  Inc(TargetRunA8);
                end;
              end
              else
              begin
                TargetRun8 := Target;
                while Count > 0 do
                begin
                  if Boolean(Mask and BitRun) then
                  begin
                    TargetRun8.R := Convert8_8(SourceR8^);
                    TargetRun8.G := Convert8_8(SourceG8^);
                    TargetRun8.B := Convert8_8(SourceB8^);

                    Inc(SourceB8, SourceIncrement);
                    Inc(SourceG8, SourceIncrement);
                    Inc(SourceR8, SourceIncrement);
                  end;
                  asm ROR BYTE PTR [BitRun], 1 end;
                  Dec(Count);
                  Inc(PByte(TargetRun8), TargetIncrement);
                end;
              end;
            end;
          16: // 888 to 161616
            begin
              if coApplyGamma in FTargetOptions then Convert8_8 := ComponentGammaConvert
                                                else Convert8_8 := ComponentNoConvert8;
              if coNeedByteSwap in FSourceOptions then Convert16_16 := ComponentSwapConvert
                                                  else Convert16_16 := ComponentNoConvert16;
              if Length(Source) = 1 then
              begin
                SourceB8 := Source[0];
                SourceG8 := SourceB8; Inc(SourceG8);
                SourceR8 := SourceG8; Inc(SourceR8);
                SourceA8 := SourceR8; Inc(SourceA8);
              end
              else
              begin
                SourceB8 := Source[0];
                SourceG8 := Source[1];
                SourceR8 := Source[2];
                if coAlpha in FSourceOptions then SourceA8 := Source[3]
                                             else SourceA8 := nil;
              end;

              if CopyAlpha then
              begin
                TargetRunA16 := Target;
                while Count > 0 do
                begin
                  if Boolean(Mask and BitRun) then
                  begin
                    TargetRunA16.R := Convert16_16(MulDiv16(Convert8_8(SourceR8^), 65535, 255));
                    TargetRunA16.G := Convert16_16(MulDiv16(Convert8_8(SourceG8^), 65535, 255));
                    TargetRunA16.B := Convert16_16(MulDiv16(Convert8_8(SourceB8^), 65535, 255));
                    TargetRunA16.A := Convert16_16(MulDiv16(SourceA8^, 65535, 255));

                    Inc(SourceB8, SourceIncrement);
                    Inc(SourceG8, SourceIncrement);
                    Inc(SourceR8, SourceIncrement);
                    Inc(SourceA8, SourceIncrement);
                  end;
                  asm ROR BYTE PTR [BitRun], 1 end;
                  Dec(Count);
                  Inc(TargetRunA16);
                end;
              end
              else
              begin
                TargetRun16 := Target;
                while Count > 0 do
                begin
                  if Boolean(Mask and BitRun) then
                  begin
                    TargetRun16.R := Convert16_16(MulDiv16(Convert8_8(SourceR8^), 65535, 255));
                    TargetRun16.G := Convert16_16(MulDiv16(Convert8_8(SourceG8^), 65535, 255));
                    TargetRun16.B := Convert16_16(MulDiv16(Convert8_8(SourceB8^), 65535, 255));

                    Inc(SourceB8, SourceIncrement);
                    Inc(SourceG8, SourceIncrement);
                    Inc(SourceR8, SourceIncrement);
                  end;
                  asm ROR BYTE PTR [BitRun], 1 end;
                  Dec(Count);
                  Inc(PWord(TargetRun16), TargetIncrement);
                end;
              end;
            end;
        end;
      end;
    16:
      begin
        if Length(Source) = 1 then
        begin
          SourceB16 := Source[0];
          SourceG16 := SourceB16; Inc(SourceG16);
          SourceR16 := SourceG16; Inc(SourceR16);
          SourceA16 := SourceR16; Inc(SourceA16);
        end
        else
        begin
          SourceB16 := Source[0];
          SourceG16 := Source[1];
          SourceR16 := Source[2];
          if coAlpha in FSourceOptions then SourceA16 := Source[3]
                                       else SourceA16 := nil;
        end;

        case FTargetBPS of
          8: // 161616 to 888
            begin
              if coApplyGamma in FTargetOptions then
              begin
                if coNeedByteSwap in FSourceOptions then Convert16_8 := ComponentSwapScaleGammaConvert
                                                    else Convert16_8 := ComponentScaleGammaConvert;
              end
              else
              begin
                if coNeedByteSwap in FSourceOptions then Convert16_8 := ComponentSwapScaleConvert
                                                    else Convert16_8 := ComponentScaleConvert;
              end;
              // since alpha channels are never gamma corrected we need a separate conversion routine
              if coNeedByteSwap in FSourceOptions then Convert16_8Alpha := ComponentSwapScaleConvert
                                                  else Convert16_8Alpha := ComponentScaleConvert;

              if CopyAlpha then
              begin
                TargetRunA8 := Target;
                while Count > 0 do
                begin
                  if Boolean(Mask and BitRun) then
                  begin
                    TargetRunA8.R := Convert16_8(SourceR16^);
                    TargetRunA8.G := Convert16_8(SourceG16^);
                    TargetRunA8.B := Convert16_8(SourceB16^);
                    TargetRunA8.A := Convert16_8Alpha(SourceA16^);
                  
                    Inc(SourceB16, SourceIncrement);
                    Inc(SourceG16, SourceIncrement);
                    Inc(SourceR16, SourceIncrement);
                    Inc(SourceA16, SourceIncrement);
                  end;
                  asm ROR BYTE PTR [BitRun], 1 end;
                  Dec(Count);
                  Inc(TargetRunA8);
                end;
              end
              else
              begin
                TargetRun8 := Target;
                while Count > 0 do
                begin
                  if Boolean(Mask and BitRun) then
                  begin
                    TargetRun8.R := Convert16_8(SourceR16^);
                    TargetRun8.G := Convert16_8(SourceG16^);
                    TargetRun8.B := Convert16_8(SourceB16^);

                    Inc(SourceB16, SourceIncrement);
                    Inc(SourceG16, SourceIncrement);
                    Inc(SourceR16, SourceIncrement);
                  end;
                  asm ROR BYTE PTR [BitRun], 1 end;
                  Dec(Count);
                  Inc(PByte(TargetRun8), TargetIncrement);
                end;
              end;
            end;
          16: // 161616 to 161616
            begin
              // no gamma correction for 16 bit samples yet
              if coNeedByteSwap in FSourceOptions then Convert16_16 := ComponentSwapConvert
                                                  else Convert16_16 := ComponentNoConvert16;

              if Length(Source) = 1 then
              begin
                SourceB16 := Source[0];
                SourceG16 := SourceB16; Inc(SourceG16);
                SourceR16 := SourceG16; Inc(SourceR16);
                SourceA16 := SourceR16; Inc(SourceA16);
              end
              else
              begin
                SourceB16 := Source[0];
                SourceG16 := Source[1];
                SourceR16 := Source[2];
                if coAlpha in FSourceOptions then SourceA16 := Source[3]
                                             else SourceA16 := nil;
              end;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产美女娇喘av呻吟久久| 美女爽到高潮91| 日韩欧美亚洲国产精品字幕久久久| 黄色精品一二区| 亚洲一区国产视频| 欧美国产一区二区| 91精品蜜臀在线一区尤物| 91在线播放网址| 精品综合久久久久久8888| 亚洲国产日韩av| 国产精品国产自产拍高清av| 欧美一区二区视频在线观看2022 | 国产成人av影院| 午夜日韩在线电影| 中文字幕欧美一| 久久久久久久久久久久久夜| 欧美日韩久久不卡| 色欧美片视频在线观看| 国产精品456| 久久精品国产成人一区二区三区 | 亚洲精选视频免费看| 久久久久久免费| 日韩亚洲国产中文字幕欧美| 欧美日韩美少妇| 色素色在线综合| 色综合一个色综合| 国产激情一区二区三区| 蜜臀av亚洲一区中文字幕| 亚洲r级在线视频| 亚洲乱码日产精品bd| 亚洲国产成人在线| 国产欧美精品国产国产专区| 2017欧美狠狠色| 日韩欧美另类在线| 日韩一区二区在线观看| 欧美高清一级片在线| 欧美性受极品xxxx喷水| 在线观看91精品国产入口| 91啪亚洲精品| 色8久久精品久久久久久蜜| 91免费视频网| 色噜噜狠狠一区二区三区果冻| 波波电影院一区二区三区| 成人午夜激情影院| 国产经典欧美精品| 99久久综合99久久综合网站| www.日本不卡| 91丝袜高跟美女视频| 91亚洲国产成人精品一区二三 | 欧美日韩激情一区二区三区| 欧美午夜片在线看| 欧美理论在线播放| 在线播放亚洲一区| 欧美成人三级在线| 亚洲精品在线观看视频| 久久久久久久久久久99999| 久久精品视频在线看| 国产精品视频一二三区| **网站欧美大片在线观看| 国产精品久久久久久久浪潮网站| 中文字幕制服丝袜一区二区三区| 亚洲伦理在线精品| 视频一区二区国产| 久久电影网电视剧免费观看| 国产一二精品视频| 99久久国产免费看| 欧美日韩一区小说| 日韩一级免费观看| 欧美极品少妇xxxxⅹ高跟鞋 | 91亚洲男人天堂| 欧美挠脚心视频网站| 欧美大片免费久久精品三p| 国产日产欧产精品推荐色| 亚洲天堂2016| 免费人成网站在线观看欧美高清| 国产盗摄视频一区二区三区| 色域天天综合网| 91麻豆精品国产自产在线| 国产亚洲欧美在线| 一级女性全黄久久生活片免费| 日韩国产成人精品| 成人高清视频在线观看| 欧美日韩精品一区视频| 欧美激情中文字幕| 亚洲电影在线播放| 国产精品91一区二区| 欧美日韩在线播| 国产亚洲一区二区三区四区| 亚洲一区在线免费观看| 国产在线观看一区二区| 色一情一伦一子一伦一区| 日韩欧美高清dvd碟片| 亚洲免费色视频| 极品少妇xxxx精品少妇| 在线观看视频一区二区 | 国产精品免费免费| 手机精品视频在线观看| av资源站一区| 日韩欧美综合一区| 亚洲影院免费观看| 成人午夜电影小说| 欧美xxxx老人做受| 天堂成人免费av电影一区| 北条麻妃一区二区三区| 久久久久久久久久久久久女国产乱| 亚洲午夜激情网站| 97精品视频在线观看自产线路二| 欧美一级免费观看| 亚洲自拍偷拍av| 91麻豆蜜桃一区二区三区| 久久综合久久综合亚洲| 日韩国产欧美三级| 日本精品一区二区三区四区的功能| 国产午夜久久久久| 久久国产精品99精品国产| 欧美午夜免费电影| 伊人开心综合网| 99久久婷婷国产综合精品| 久久久久久久免费视频了| 美女网站一区二区| 欧美日韩夫妻久久| 亚洲午夜三级在线| 色噜噜狠狠色综合中国| 亚洲图片另类小说| 99久久精品一区二区| 欧美韩国日本一区| 国产99久久久国产精品潘金| 精品国产百合女同互慰| 蜜桃av一区二区三区| 欧美电影免费观看高清完整版在| 午夜不卡在线视频| 欧美日韩国产一级二级| 夜夜嗨av一区二区三区四季av| 91老师片黄在线观看| 日韩理论片在线| 色综合天天性综合| 亚洲精品自拍动漫在线| 91久久香蕉国产日韩欧美9色| 亚洲视频一二区| 91网页版在线| 一级日本不卡的影视| 欧美日韩国产精选| 舔着乳尖日韩一区| 日韩一区二区三区视频在线观看| 久久精品99国产精品| 久久综合久久综合九色| 国产高清精品久久久久| 国产精品无圣光一区二区| 不卡一卡二卡三乱码免费网站| 国产精品电影一区二区三区| 99精品国产热久久91蜜凸| 亚洲欧美国产77777| 在线观看日产精品| 青娱乐精品视频| 亚洲精品一线二线三线无人区| 国产福利一区二区三区视频| 国产精品乱码一区二区三区软件 | 成人丝袜18视频在线观看| 国产精品福利一区| 91成人看片片| 日本视频中文字幕一区二区三区| 日韩欧美一级片| 高清在线不卡av| 一区二区三区小说| 日韩一区二区三区免费看| 精品一区二区三区的国产在线播放 | 不卡在线观看av| 一区二区三区小说| 日韩欧美国产综合一区| 国产99精品国产| 亚洲综合偷拍欧美一区色| 欧美一级二级在线观看| 国产二区国产一区在线观看| 亚洲老司机在线| 精品久久久网站| 91蝌蚪porny| 青青草视频一区| 国产精品女上位| 8v天堂国产在线一区二区| 国产传媒久久文化传媒| 亚洲一区视频在线观看视频| 久久久久久久综合狠狠综合| 欧美伊人久久久久久久久影院| 久久99精品国产麻豆婷婷洗澡| 中文字幕欧美国产| 7777精品伊人久久久大香线蕉 | 日韩经典中文字幕一区| 久久久久久亚洲综合影院红桃| 欧美最猛性xxxxx直播| 韩国三级中文字幕hd久久精品| 亚洲欧美色综合| 欧美va亚洲va香蕉在线| 欧美中文字幕久久| 国产成人久久精品77777最新版本| 亚洲国产一区二区三区青草影视| 久久久久国产免费免费| 777xxx欧美| 色综合久久天天| 国产福利91精品| 美女视频网站久久|