나는 델파이 7로 작성된 어딘가에있는 드로잉 소프트웨어의 소스 코드를 가지고있다.이 코드는 꽤 코드 크기가 크다. 해당 소프트웨어로 그리는 모든 것은 단색이며 투명성이 없습니다. 대부분의 코드를 읽으려고하면 그리기에 사용되는 주요 구성 요소가 TCanvas라는 것을 알게되었습니다. 투명성이 허용되도록 TCanvas를 쉽게 설치할 수 있습니까? 감사.Delphi TCanvas에서 반투명 rect를 소개하는 방법은 무엇입니까?
답변
투명도는 캔버스에 문제가 아니며 그림의 문제점입니다. 계층화 된 창을 제외하고 wincontrol을 실제로 투명하게 만들 수있는 방법은 없습니다. 이것이 질문이라면 모든 캔버스에 투명도로 칠할 수 있습니다. 예 : 당신은 GDI +를 사용할 수 투명성 쉽게 페인트 작업을 수행하려면
Canvas.Draw(0,0,png1);
Canvas.Draw(0,0,png2);
는이 방법이 추가적으로 librarays
unit Unit3;
// 20121108 by Thomas Wassermann
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, jpeg;
type
TForm3 = class(TForm)
Image1: TImage;
PaintBox1: TPaintBox;
procedure FormCreate(Sender: TObject);
procedure PaintBox1Paint(Sender: TObject);
procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
private
{ Private-Deklarationen }
FDownPoint, FCurrentPoint: TPoint;
public
{ Public-Deklarationen }
end;
var
Form3: TForm3;
implementation
uses Math;
{$R *.dfm}
procedure TForm3.FormCreate(Sender: TObject);
begin
PaintBox1.BringToFront;
end;
type
pRGBQuadArray = ^TRGBQuadArray;
TRGBQuadArray = ARRAY [0 .. $EFFFFFF] OF TRGBQuad;
Procedure SetAlpha(bmp: TBitMap; Alpha: Byte; R: TRect);
var
pscanLine32: pRGBQuadArray;
i, j: Integer;
begin
bmp.PixelFormat := pf32Bit;
bmp.HandleType := bmDIB;
bmp.ignorepalette := true;
bmp.alphaformat := afDefined;
for i := 0 to bmp.Height - 1 do
begin
pscanLine32 := bmp.Scanline[i];
for j := 0 to bmp.Width - 1 do
begin
if (j >= R.Left) and (j <= R.Right) and (i >= R.Top) and (i <= R.Bottom) then
begin
pscanLine32[j].rgbReserved := 0;
pscanLine32[j].rgbBlue := 0;
pscanLine32[j].rgbRed := 0;
pscanLine32[j].rgbGreen := 0;
end
else
begin
pscanLine32[j].rgbReserved := Alpha;
pscanLine32[j].rgbBlue := Alpha;
pscanLine32[j].rgbRed := Alpha;
pscanLine32[j].rgbGreen := Alpha;
end;
end;
end;
end;
procedure TForm3.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
FDownPoint.X := X;
FDownPoint.Y := Y;
FCurrentPoint := FDownPoint;
PaintBox1.Invalidate;
end;
procedure TForm3.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ssLeft in Shift then
begin
FCurrentPoint.X := X;
FCurrentPoint.Y := Y;
PaintBox1.Invalidate;
end;
end;
procedure TForm3.PaintBox1Paint(Sender: TObject);
var
bmp: TBitMap;
SelRect: TRect;
begin
bmp := TBitMap.Create;
try
bmp.Width := PaintBox1.Width;
bmp.Height := PaintBox1.Height;
if (FCurrentPoint.X = FDownPoint.X) and (FCurrentPoint.Y = FDownPoint.Y) then
SelRect := PaintBox1.BoundsRect
else
begin
SelRect.Left := Min(FCurrentPoint.X, FDownPoint.X);
SelRect.Top := Min(FCurrentPoint.Y, FDownPoint.Y);
SelRect.Right := Max(FCurrentPoint.X, FDownPoint.X);
SelRect.Bottom := Max(FCurrentPoint.Y, FDownPoint.Y);
end;
SetAlpha(bmp, 140, SelRect);
PaintBox1.Canvas.Draw(0, 0, bmp);
finally
bmp.Free;
end;
end;
end.
답장을 보내 주셔서 감사합니다. 하지만 코드를 수정할 수는 없다고 생각합니다. 컨테이너가 TCustomControl이고 캔버스가 TCanvas라는 것을 알고 있습니다. 내가 할 수있는 일은 소프트웨어가 광산 캔버스를 대신 사용할 수 있도록 TCanvas를 상속하는 것입니다. 그렇게하는 방법을 사십시오? PaintBox, BitMap 등의 구성 요소를 추가 할 수 없습니다. – user1285419
이것이 가능할 것이라고 나는 생각하지 않는다. Canvas는 개인 FCanvas를위한 읽기 전용 Proprty이다. – bummi
- 1. 안드로이드에서 rect를 축척하는 방법은 무엇입니까?
- 2. API 디자인에 특별한 경우를 소개하는 방법은 무엇입니까?
- 3. TCanvas에서 "첨가물"텍스트 렌더링?
- 4. 이미지를 사용하여 Rect를 만드는 방법은 무엇입니까?
- 5. iOS의 UIImage에서 rect를 삭제하는 방법은 무엇입니까?
- 6. webgl에서 반투명 색상을 설정하는 방법은 무엇입니까?
- 7. div를 반투명 이미지로 덮을 수있는 방법은 무엇입니까?
- 8. 정적 텍스트에 반투명 사각형을 그리는 방법은 무엇입니까?
- 9. 그래픽 객체에 반투명 텍스트를 그리는 방법은 무엇입니까?
- 10. 테마에 영향을주지 않고 Tumblr 환경에서 CSS 규칙을 소개하는 방법은 무엇입니까?
- 11. 공동 프로그래머에게 도메인 기반 디자인을 소개하는 방법은 무엇입니까?
- 12. Java Web Start GUI 응용 프로그램을 소개하는 방법은 무엇입니까?
- 13. PIL로 반투명 폴리곤 그리기
- 14. Python에서 rect를 클릭하기위한 테스트
- 15. Delphi 프로젝트를 디버깅하는 방법은 무엇입니까?
- 16. 아이폰에 반투명 버튼을 만드는 방법은?
- 17. 변수 쌍을 소개하는 매크로 정의
- 18. 배경 반투명 div
- 19. 반투명 한 Winforms 반투명 PNG 이상의 PNG
- 20. TCanvas (delphi)의 textOut 색상을 변경하려면 어떻게해야합니까?
- 21. 전체 클라이언트 rect를 얻는 방법?
- 22. CToolTipCtrl의 도구 rect를 수정하는 방법?
- 23. SherlockActionBar 반투명
- 24. WebGL 반투명 흰색 나타납니다
- 25. WPF에서 요소 위로 반투명 음영을 추가하는 방법은 무엇입니까?
- 26. wxpython을 사용하여 반투명/알파 투명 사각형을 만드는 방법은 무엇입니까?
- 27. 이미지에 반투명 픽셀이 포함되어 있는지 확인하는 가장 빠른 방법은 무엇입니까?
- 28. 자바의 netbeans 플랫폼에서 반투명 창 클래스를 만드는 방법은 무엇입니까?
- 29. 안드로이드 2D 그래픽에서 rect를 회전 시키시겠습니까?
- 30. Delphi XE3 이전 오류를 수정하는 방법은 무엇입니까?
이를하지 않고 투명한 선택을 그리는 예를 들어 것 http://www.progdigy.com/?page_id=7
에서 가져온 할 수있다 꽤 일반적인 질문입니다. 투명성과 드로잉은 광범위한 주제입니다. 아마도 조금 좁힐 수 있을까요? –
기존 코드에서 페인팅을 투명하게 그려야합니까? 무엇에? – NGLN