📄 jvqpainterqbform.pas
字号:
end;
function BGProdProdSum(Inner, Outer: Integer): Integer;
begin
Result := (Outer * Inner) * (Outer + Inner);
end;
function BGDrawXor(Inner, Outer: Integer): Integer;
begin
Result := (Outer - ImgDrawFactor) xor (ImgDrawFactor + Inner);
end;
// end of functions used in Quick Background
procedure SetQBFuncs;
begin
QBFuncs[0] := BGProd;
QBFuncs[1] := BGSum;
QBFuncs[2] := BGSub;
QBFuncs[3] := BGXor;
QBFuncs[4] := BGAnd;
QBFuncs[5] := BGOutAnd;
QBFuncs[6] := BGInAnd;
QBFuncs[7] := BGOutXor;
QBFuncs[8] := BGInXor;
QBFuncs[9] := BGOutMod;
QBFuncs[10] := BGInMod;
QBFuncs[11] := BGProdXor;
QBFuncs[12] := BGSumXor;
QBFuncs[13] := BGSubXor;
QBFuncs[14] := BGProdAnd;
QBFuncs[15] := BGSumAnd;
QBFuncs[16] := BGSubAnd;
QBFuncs[17] := BGInner;
QBFuncs[18] := BGOuter;
QBFuncs[19] := BGOutRed;
QBFuncs[20] := BGInRed;
QBFuncs[21] := BGOutGreen;
QBFuncs[22] := BGInGreen;
QBFuncs[23] := BGOutBlue;
QBFuncs[24] := BGInBlue;
QBFuncs[25] := BGInModOut;
QBFuncs[26] := BGOutModIn;
QBFuncs[27] := BGOutModIn2;
QBFuncs[28] := BGModMod;
QBFuncs[29] := BGModModXor;
QBFuncs[30] := BGMod3;
QBFuncs[31] := BGModModSub;
QBFuncs[32] := BGModModAdd;
QBFuncs[33] := BGModModAnd;
QBFuncs[34] := BGModModOr;
QBFuncs[35] := BGXOr3;
QBFuncs[36] := BGXOr3Mod;
QBFuncs[37] := BGSubXorSum;
QBFuncs[38] := BGSubProdSum;
QBFuncs[39] := BGProdProdSum;
QBFuncs[40] := BGDrawXor;
end;
procedure TPainterQBForm.QuickBack;
var
Bmp: TBitmap;
I, J: Integer;
Line: PJvRGBArray;
begin
RedBack := QBFuncs[QBRedFn];
GreenBack := QBFuncs[QBGreenFn];
BlueBack := QBFuncs[QBBlueFn];
Bmp := TBitmap.Create;
try
Bmp.Assign(FPainterForm.Picture.Bitmap);
Bmp.PixelFormat := pf24bit;
for I := 0 to Bmp.Height - 1 do
begin
Line := Bmp.ScanLine[I];
for J := 0 to Bmp.Width - 1 do
begin
Line[J].rgbRed := QBDRed + RedBack(I, J);
Line[J].rgbGreen := QBDGreen + GreenBack(I, J);
Line[J].rgbBlue := QBDBlue + BlueBack(I, J);
end;
end;
FPainterForm.Preview(Bmp);
finally
Bmp.Free;
end;
end;
procedure TPainterQBForm.QBListClick(Sender: TObject);
var
Index: Integer;
begin
Index := QBList.ItemIndex;
if redradio.Checked then
QBRedFn := Index;
if greenradio.Checked then
QBGreenFn := Index;
if blueradio.Checked then
QBBlueFn := Index;
SetLabels;
QuickBack;
end;
procedure TPainterQBForm.FormShow(Sender: TObject);
begin
SetLabels;
end;
procedure TPainterQBForm.qbpresetsDrawItem(Sender: TObject; Index: Integer;
Rect: TRect; State: TOwnerDrawState; var Handled: Boolean);
var
S: string;
P: Integer;
begin
S := qbpresets.Items[Index];
P := Pos('=', S);
S := Copy(S, 1, P - 1);
qbpresets.Canvas.TextRect(Rect, Rect.Left, Rect.Top, S);
Handled := True;
end;
procedure TPainterQBForm.qbpresetsClick(Sender: TObject);
begin
if qbpresets.ItemIndex >= 0 then
StrToQuickBack(qbpresets.Items[qbpresets.ItemIndex]);
end;
procedure TPainterQBForm.SetLabels;
begin
redradio.Caption := QBList.Items[QBRedFn];
greenradio.Caption := QBList.Items[QBGreenFn];
blueradio.Caption := QBList.Items[QBBlueFn];
end;
procedure TPainterQBForm.AddBackdrop1Click(Sender: TObject);
var
S: string;
begin
S := InputBox(RsPainterQuickBackdrops, RsEnterName, '');
if S = '' then
Exit;
S := S + '=' +
IntToStr(QBRedFn) + ',' +
IntToStr(QBGreenFn) + ',' +
IntToStr(QBBlueFn) + ',' +
IntToStr(QBDRed) + ',' +
IntToStr(QBDGreen) + ',' +
IntToStr(QBDBlue) + ',' +
IntToStr(ImgDrawFactor);
qbpresets.Items.Append(S);
qbpresets.Items.SaveToFile(QBFile);
end;
procedure TPainterQBForm.DeleteBackdrop1Click(Sender: TObject);
begin
if qbpresets.ItemIndex >= 0 then
begin
qbpresets.Items.Delete(qbpresets.ItemIndex);
qbpresets.Items.SaveToFile(QBFile);
end;
end;
procedure TPainterQBForm.FormCreate(Sender: TObject);
begin
ImgDrawFactor := 255;
QBDRed := 0;
QBDBlue := 0;
QBDGreen := 0;
QBRedFn := 0;
QBGreenFn := 0;
QBBlueFn := 0;
SetQBFuncs;
QBFile := ApplDir + 'PainterQB.txt';
if FileExists(QBFile) then
qbpresets.Items.LoadFromFile(QBFile);
end;
procedure TPainterQBForm.trkRedChange(Sender: TObject);
begin
QBDRed := trkred.Position;
QuickBack;
end;
procedure TPainterQBForm.trkGreenChange(Sender: TObject);
begin
QBDGreen := trkgreen.Position;
QuickBack;
end;
procedure TPainterQBForm.trkBlueChange(Sender: TObject);
begin
QBDBlue := trkblue.Position;
QuickBack;
end;
procedure TPainterQBForm.trkFactorChange(Sender: TObject);
begin
ImgDrawFactor := trkfactor.Position;
QuickBack;
end;
procedure TPainterQBForm.UpdateBackdrop1Click(Sender: TObject);
var
S: string;
P: Integer;
begin
if qbpresets.ItemIndex < 0 then
begin
ShowMessage(RsNoItemSelected);
Exit;
end;
S := qbpresets.Items[qbpresets.ItemIndex];
P := Pos('=', S);
S := Copy(S, 1, P - 1);
S := InputBox(RsPainterQuickBackdrops, RsEnterName, S);
if S = '' then
Exit;
S := S + '=' +
IntToStr(QBRedFn) + ',' +
IntToStr(QBGreenFn) + ',' +
IntToStr(QBBlueFn) + ',' +
IntToStr(QBDRed) + ',' +
IntToStr(QBDGreen) + ',' +
IntToStr(QBDBlue) + ',' +
IntToStr(ImgDrawFactor);
qbpresets.Items[qbpresets.ItemIndex] := S;
qbpresets.Items.SaveToFile(QBFile);
end;
function TPainterQBForm.StrToQuickBack(S: string): Boolean;
var
P: Integer;
List: TStringList;
begin
Result := False;
P := Pos('=', S);
if P = 0 then
Exit;
S := Copy(S, P + 1, Length(S));
List := TStringList.Create;
try
try
List.CommaText := S;
QBRedFn := StrToInt(List[0]);
QBGreenFn := StrToInt(List[1]);
QBBlueFn := StrToInt(List[2]);
QBDRed := StrToInt(List[3]);
trkred.Position := QBDRed;
QBDGreen := StrToInt(List[4]);
trkgreen.Position := QBDGreen;
QBDBlue := StrToInt(List[5]);
trkblue.Position := QBDBlue;
ImgDrawFactor := StrToInt(List[6]);
trkfactor.Position := ImgDrawFactor;
SetLabels;
QuickBack;
Result := True;
except
ShowMessage(RsErrorInPresets);
Result := False;
end;
finally
List.Free;
end;
end;
procedure TPainterQBForm.redradioClick(Sender: TObject);
begin
QBList.ItemIndex := QBRedFn;
end;
procedure TPainterQBForm.greenradioClick(Sender: TObject);
begin
QBList.ItemIndex := QBGreenFn;
end;
procedure TPainterQBForm.blueradioClick(Sender: TObject);
begin
QBList.ItemIndex := QBBlueFn;
end;
procedure TPainterQBForm.SetDrawImage(ADrawImage: TJvDrawImage);
begin
FPainterForm := ADrawImage;
end;
{$IFDEF UNITVERSIONING}
const
UnitVersioning: TUnitVersionInfo = (
RCSfile: '$RCSfile: JvQPainterQBForm.pas,v $';
Revision: '$Revision: 1.16 $';
Date: '$Date: 2004/09/10 22:05:59 $';
LogPath: 'JVCL\run'
);
initialization
RegisterUnitVersion(HInstance, UnitVersioning);
finalization
UnregisterUnitVersion(HInstance);
{$ENDIF UNITVERSIONING}
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -