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

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

?? ggraphiccolor.pas

?? [原創]這是我寫的一個圖像組件!組件中使用了GraphicEx庫
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
              if CopyAlpha then
              begin
                TargetRunA16 := Target;
                while Count > 0 do
                begin
                  if Boolean(Mask and BitRun) then
                  begin
                    TargetRunA16.R := Convert16_16(SourceR16^);
                    TargetRunA16.G := Convert16_16(SourceG16^);
                    TargetRunA16.B := Convert16_16(SourceB16^);
                    TargetRunA16.A := Convert16_16(SourceA16^);

                    Inc(SourceB16, SourceIncrement);
                    Inc(SourceG16, SourceIncrement);
                    Inc(SourceR16, SourceIncrement);
                    Inc(SourceA16, 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(SourceR16^);
                    TargetRun16.G := Convert16_16(SourceG16^);
                    TargetRun16.B := Convert16_16(SourceB16^);

                    Inc(SourceB16, SourceIncrement);
                    Inc(SourceG16, SourceIncrement);
                    Inc(SourceR16, SourceIncrement);
                  end;
                  asm ROR BYTE PTR [BitRun], 1 end;
                  Dec(Count);
                  Inc(PWord(TargetRun16), TargetIncrement);
                end;
              end;
            end;
        end;
      end;
  end;
end;

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

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

// Converts BGR source schemes to RGB target schemes and takes care for byte swapping, alpha copy/skip and
// gamma correction. 

var
  SourceR16,
  SourceG16,
  SourceB16,
  SourceA16: PWord;

  SourceR8,
  SourceG8,
  SourceB8,
  SourceA8: PByte;

  TargetRun16: PRGB16;
  TargetRunA16: PRGBA16;
  TargetRun8: PRGB;
  TargetRunA8: PRGBA;
  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;

              if CopyAlpha then
              begin
                TargetRunA16 := Target;
                while Count > 0 do
                begin
                  if Boolean(Mask and BitRun) then
                  begin
                    TargetRunA16.R := Convert16_16(SourceR16^);
                    TargetRunA16.G := Convert16_16(SourceG16^);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久9999吃药| 国产最新精品精品你懂的| 丁香六月综合激情| 2020国产精品久久精品美国| 中文字幕亚洲精品在线观看 | 中文字幕一区日韩精品欧美| 精品一区二区三区免费观看| 精品欧美一区二区三区精品久久 | 欧美欧美午夜aⅴ在线观看| 日本一区二区三区国色天香| 国产精品自产自拍| 欧美成人bangbros| 国产精品亚洲人在线观看| 国产亚洲精品免费| 国产 日韩 欧美大片| 欧美国产日韩亚洲一区| av毛片久久久久**hd| 国产精品激情偷乱一区二区∴| 成人黄色一级视频| 亚洲图片激情小说| 色综合色狠狠天天综合色| 亚洲精品高清视频在线观看| 欧美综合一区二区| 亚洲成人午夜电影| 91久久精品国产91性色tv | 国产精品网站在线| 91亚洲精华国产精华精华液| 一区二区三区四区中文字幕| 欧美日韩成人高清| 狠狠色丁香婷婷综合| 欧美成人a视频| 成人动漫一区二区| 亚洲午夜三级在线| 日韩一级二级三级| 亚洲不卡一区二区三区| 欧美mv日韩mv国产| 色婷婷香蕉在线一区二区| 亚洲欧洲日韩一区二区三区| 欧美午夜在线观看| 国产在线播放一区| 欧美国产一区视频在线观看| 在线观看成人免费视频| 亚洲免费观看高清完整版在线观看| 欧美在线综合视频| 国产在线国偷精品免费看| 中文字幕在线不卡视频| 在线免费av一区| 午夜一区二区三区在线观看| 久久综合九色综合久久久精品综合| 91在线一区二区| 老司机午夜精品99久久| 亚洲猫色日本管| 在线视频欧美精品| 国产在线播精品第三| 亚洲成人www| 国产精品免费丝袜| 欧美xingq一区二区| 91黄色免费看| 成人av资源网站| 中文字幕一区二区不卡| 欧美哺乳videos| 欧美主播一区二区三区| 国产传媒日韩欧美成人| 免费看欧美美女黄的网站| 国产精品午夜久久| 欧美日韩一区二区在线观看| 国内精品久久久久影院色| 亚洲高清久久久| 久久综合久久综合九色| 欧美一三区三区四区免费在线看| 成人a免费在线看| 国产美女在线精品| 免费观看在线综合色| 国产精品久久久久久久久免费樱桃| 欧美另类videos死尸| 91网站最新地址| 国产一区二区网址| 午夜影院在线观看欧美| 亚洲免费观看高清在线观看| 国产精品午夜春色av| 久久精品人人做人人综合| 欧美精品色综合| 欧美日韩性生活| 在线观看成人小视频| 日本精品视频一区二区三区| av成人老司机| 成人动漫一区二区在线| 成人网页在线观看| 成人av手机在线观看| 成人免费视频国产在线观看| 丝袜美腿亚洲综合| 午夜成人免费视频| 亚洲欧美怡红院| 亚洲嫩草精品久久| 久久理论电影网| 日韩一区国产二区欧美三区| 一本色道久久综合亚洲精品按摩| 亚洲另类在线视频| 亚洲黄网站在线观看| 亚洲综合精品自拍| 国产精品人人做人人爽人人添| 中文一区在线播放| 国产精品网曝门| 日韩理论片在线| 一区二区三区日韩欧美| 国产精品不卡视频| 亚洲码国产岛国毛片在线| 一级特黄大欧美久久久| 亚洲福利视频一区二区| 日本不卡免费在线视频| 精品系列免费在线观看| 国产麻豆视频精品| 99久久精品免费精品国产| 色综合天天综合在线视频| 欧美日韩一区成人| 国产午夜亚洲精品理论片色戒| 一区二区激情小说| 久久99日本精品| 色哟哟精品一区| 精品国产91乱码一区二区三区 | 99re亚洲国产精品| 欧美美女一区二区在线观看| 欧美精彩视频一区二区三区| 五月婷婷色综合| 成人影视亚洲图片在线| 欧美一区二区三区四区久久| 欧美国产日韩a欧美在线观看| 亚洲成人av电影在线| 国产成人aaa| 欧美一区二区三区四区久久| 亚洲色图在线播放| 国产精品88av| 欧美一级免费观看| 亚洲男同性恋视频| 国产精品91xxx| 日韩你懂的在线播放| 亚洲一区二区精品久久av| 成人做爰69片免费看网站| 日韩免费看的电影| 亚洲午夜电影网| 91蜜桃免费观看视频| 国产欧美日韩在线| 国产在线精品不卡| 日韩午夜在线观看视频| 夜夜操天天操亚洲| 91丝袜国产在线播放| 国产日产欧美一区| 国产真实乱偷精品视频免| 在线播放亚洲一区| 亚洲一区二区三区在线| av电影在线观看一区| 国产农村妇女毛片精品久久麻豆 | 久久99久久99小草精品免视看| 欧美日韩一区二区三区在线| 亚洲欧美国产高清| www.日韩av| 中文字幕在线观看一区二区| 国产成人精品www牛牛影视| 日韩视频一区二区三区| 蜜臀av国产精品久久久久| 欧美肥胖老妇做爰| 亚洲成人黄色影院| 777午夜精品视频在线播放| 午夜久久久久久久久久一区二区| 日本精品裸体写真集在线观看| 亚洲欧洲国产日本综合| 99re成人精品视频| 日韩一区在线播放| 色婷婷综合五月| 一区二区三区在线视频免费观看| 91免费观看视频在线| 亚洲欧美色图小说| 欧美亚洲国产一卡| 午夜精品一区二区三区免费视频 | 亚洲综合一区在线| 欧美日韩一区久久| 日本亚洲三级在线| 欧美精品一区二区三区蜜桃 | 综合久久一区二区三区| 日本大香伊一区二区三区| 亚洲va欧美va国产va天堂影院| 欧美三级欧美一级| 男人的j进女人的j一区| 欧美大片免费久久精品三p| 国产一区二三区| 亚洲国产高清aⅴ视频| 成人av动漫在线| 亚洲综合一区二区精品导航| 69堂精品视频| 国产一级精品在线| 国产精品大尺度| 欧美三级日韩在线| 国产一区不卡视频| 亚洲欧美视频在线观看视频| 欧美三区在线观看| 国精产品一区一区三区mba视频| 国产精品女人毛片| 欧美精品在线一区二区| 国内精品国产成人国产三级粉色 | 在线视频一区二区三区|