Недавно добавленные исходники

•  Animation Loaders  883

•  DeLiKaTeS Tetris (Тетрис)  5 839

•  TDictionary Custom Sort  7 787

•  Fast Watermark Sources  7 460

•  3D Designer  10 691

•  Sik Screen Capture  8 010

•  Patch Maker  8 218

•  Айболит (remote control)  8 268

•  ListBox Drag & Drop  7 079

•  Доска для игры Реверси  100 614

•  Графические эффекты  8 341

•  Рисование по маске  7 715

•  Перетаскивание изображений  6 317

•  Canvas Drawing  6 689

•  Рисование Луны  6 622

•  Поворот изображения  5 759

•  Рисование стержней  4 701

•  Paint on Shape  3 406

•  Генератор кроссвордов  4 385

•  Головоломка Paletto  3 529

•  Теорема Монжа об окружностях  4 336

•  Пазл Numbrix  2 810

•  Заборы и коммивояжеры  3 757

•  Игра HIP  2 526

•  Игра Go (Го)  2 528

•  Симулятор лифта  2 923

•  Программа укладки плитки  2 348

•  Генератор лабиринта  3 093

•  Проверка числового ввода  2 584

•  HEX View  2 987

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Смешать два цвета с использованием коэффициента прозрачности



Оформил: DeeCo

// This function mixes two bytes According to value of TRANS 
// The value of TRANS is between 0 (result then will be equal to FG) 
// and 255 (result then will be equal to BG) 
function MixBytes(FG, BG, TRANS: byte): byte;
 asm
   push bx  // push some regs 
  push cx
   push dx
   mov DH,TRANS // remembering Transparency value (or Opacity - as you like) 
  mov BL,FG    // filling registers with our values 
  mov AL,DH    // BL = ForeGround (FG) 
  mov CL,BG    // CL = BackGround (BG) 
  xor AH,AH    // Clear High-order parts of regs 
  xor BH,BH
   xor CH,CH
   mul BL       // AL=AL*BL 
  mov BX,AX    // BX=AX 
  xor AH,AH
   mov AL,DH
   xor AL,$FF   // AX=(255-TRANS) 
  mul CL       // AL=AL*CL 
  add AX,BX    // AX=AX+BX 
  shr AX,8     // Fine! Here we have mixed value in AL 
  pop dx       // Hm... No rubbish after us, ok? 
  pop cx
   pop bx       // Bye, dear Assembler - we go home to Delphi! 
end;

 // Here we mix R,G and B channels of our colors separately. 
// The value of T is between 0 and 255 as described above. 

// As you know, TColor value is 4 bytes length integer value where 
// low byte is red channel, 2nd byte is green and 3rd byte is blue 

function MixColors(FG, BG: TColor; T: byte): TColor;
 var r,g,b:byte;
 begin
   R := MixBytes(FG and 255,BG and 255,T); // extracting and mixing Red 
  G := MixBytes((FG shr 8) and 255,(BG shr 8) and 255,T); // the same with green 
  B := MixBytes((FG shr 16) and 255,(BG shr 16) and 255,T); // and blue, of course 
  Result := r+g*256+b*65536; // finishing with combining all channels together 
end;




Похожие по теме исходники

Изменение цвета изображения




Copyright © 2004-2026 "Delphi Sources" by «SiteAnalyzer». Delphi World FAQ

Группа ВКонтакте