<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />아래 JSL은 무지개색 배경과 만델브로 모양 마스크라는 두 개의 비트맵을 만듭니다.두 개의 비트맵이 그래프에 추가되고 무지개가 마스크 아래에서 이동합니다.비트맵은 한 번만 생성되고 OS는 마스크의 투명 구멍에 대한 지원을 제공하기 때문에 매우 빠릅니다.
마스크의 투명한 구멍은 빨간색, 녹색, 파란색 레이어와 유사한 알파 레이어로 만들어집니다.알파는 이전에 그려진 픽셀 위에 렌더링될 때 픽셀의 투명/불투명 정도를 결정하는 0과 1 사이의 숫자입니다.이 예에서 알파는 0(투명) 또는 1(불투명)입니다.비트맵을 중간 값과 혼합할 수 있습니다.
JSL의 이 인라인 버전은 비디오의 비트맵을 만들기 위해 조정되었습니다.첨부된 파일은 타이머를 사용하여 다음에 표시할 프레임을 결정하므로 실행되면서 조금 더 좋아 보일 수 있습니다.
크레이지 헤일즈 - YouTube
https://www.youtube.com/watch?v=NA-O0YbehpQ
// 이 예는 구멍이 있는 이미지를 만드는 한 가지 방법을 보여줍니다.
// 대부분의 이미지는 빨간색, 녹색, 파란색을 사용합니다(배경 무지개처럼).
// 아래 이미지).일부 이미지에는 Alpha를 설명하는 네 번째 채널로 추가합니다.
// 불투명성 또는 투명도.JMP에서는 불투명한 경우 1을 사용합니다.
//
규모 = 35; // 전체 크기
nr = 20 * 규모; // 종횡비
nc = 25 * 규모; // 종횡비
// 픽셀은 처음에 행렬로 만들어지고 J 함수로 할당됩니다.
transp = J(nr,nc,0);
// 만델브로트 함수로 픽셀을 채웁니다.병렬 할당 사용
// 속도를 위해 중첩 루프 대신.
병렬 할당(
{nr = N 행( transp ), nr2 = N 행( transp ) / 2,
nc = N Cols( transp ), nc3 = N Cols( transp ) / 1.3333, 제한 = 1000},
transp[r, c] = Mandelbrot( Limit, 4, // 1..limit의 정수 답을 반환합니다.
2 * (c - nc3) / Sqrt( nr * nc ), // 행렬 행, 열을 흥미로운 공간으로 크기 조정
2 * (r - nr2) / Sqrt( nr * nc ) ) / 한계 // 한계 스케일로 나누기 0..1
);
// 다음 줄이 중요합니다.이 이미지는 4개의 데이터 채널로 생성되었으며,
// 빨간색, 녹색, 파란색, 알파입니다.r,g,b에 동일한 "transp" 값이 사용되기 때문에
// 이미지는 회색조이지만 Mandelbrot()의 데이터로 인해 많이 표시되지는 않습니다.
// 마스크의 회색...검은색만 있습니다.2nd transp를 1-transp로 변경하면 다음과 같이 표시됩니다.
// 녹색 마스크.그러나 중요한 매개변수는 알파를 생성하는 transp<.5입니다.
// 채널.transp는 0과 1 사이의 값으로 구성된 직사각형 행렬입니다. 높은 가치
//는 만델브로 집합 내부의 평평한 영역이고, 낮은 값은 외부입니다.트랜스퍼<.5
// 외부는 true 또는 1이고 내부는 false 또는 0입니다.이것은 직사각형 배열을 만든다.
// 0 또는 1인 알파: 1은 마스크이고 0은 투명합니다.(알파는 분수일 수 있습니다.
// 그러면 비트맵이 혼합됩니다.여기서는 사용하지 않습니다.)
transpImage = 새 이미지( "rgba", {transp, transp, transp, transp < .5} );
// 이 예에서는 저장된 이미지를 사용하지 않지만 다음과 같이 할 수 있으며 png
// 예를 들어 Gimp로 열면 저장 내용이 투명해집니다.
// 테스트: transpimage << saveimage( "\\VBOXSVR\windowsShare\transparent\test.png", "png" );
// 애니메이션을 담을 창을 만들고 비트맵을 담을 그래프박스를 만듭니다.
// JMP에서 투명한 비트맵을 보여주는 가장 좋은 방법은 그래프에 있는 것입니다.
// 비트맵이 있는 다른 디스플레이 상자는 실제로 서로 겹치는 것을 원하지 않기 때문입니다.
새 창("투명도",
gb = Graph Box( 프레임 크기( nc + 20, nr + 20 ), // 주위에 10픽셀 무지개 테두리
<<배경색( "빨간색" ) ) ); // 두 번째 이미지가 추가되기 직전에 빨간색이 표시될 수 있습니다.
// 첫 번째 이미지를 프레임에 삽입하고 이미지 세그먼트에 대한 핸들을 가져옵니다.
gb[framebox( 1 )] << addimage( image( transpimage ) );
transpSeg = gb[framebox( 1 )] << childseg;
// 위치를 지정합니다. 이 "마스크"는 바로 여기에 한 번만 위치합니다.
transpSeg << move( 50, 50 );
//
//
// 투명도 없이 두 번째 reinbow 이미지 만들기
배경 = J(nr * 2, nc * 2, 0 ); // 스크롤을 위한 추가 정보입니다.무지개 픽셀을 만들어 보세요...
병렬 할당(
{nr = N 행(배경), nc = N Cols(배경)},
배경[r, c] = RGB 색상( (Sin( r / 70 ) + 1) / 2, (Sin( c / 50 ) + 1) / 2, Sin( (r + c) / 60 ) )
);
// 픽셀을 비트맵 이미지로 변환하고, 프레임에 추가하고, 핸들을 얻습니다.
backgroundImage = 새 이미지(배경);
gb[framebox( 1 )] << addimage( image( backgroundImage ) );
backgroundSeg = gb[framebox( 1 )] << childseg;
//
wait(.1);// 루프가 시작되기 전에 창이 열리는지 확인하세요
//
시작 = 0; // 더 부드러운 애니메이션을 만들기 위해 시간을 사용합니다.
프레임=0;
while( start < 30, // 30초 동안 실행
위치 = 시작; // sin 및 cos에 대한 라디안 인수로 사용됩니다.
시작 = 시작 + 1/30;
x = 50 + 50 * Sin( 위치 * .39 ); // 임의의 스케일링을 사용하여
y = 50 + 50 * Cos( 위치 * .27 ); // 예술 라이센스
// 좋습니다. 이건 좀 어색합니다. 이동 방법을 평가하는 데 도움이 필요한 것 같습니다...
// EvalExpr은 인수를 살펴보고 평가할 Expr을 검색합니다.
// EvalExpr은 여전히 평가가 필요한 표현식을 반환합니다.
Eval( Eval Expr( backgroundseg << move( Expr( x ), Expr( y ) ) ) );
// gb<<무효; 기다려(0); 애니메이션이 대기로 인해 불규칙해짐(상호작용이 가능함)
gb << 업데이트창; // 매우 부드러운 애니메이션이지만 대화형은 아닙니다.
//그림 만들기: gb << savepicture("\\VBOXSVR\windowsShare\transparent\v\v"||right(char(frame++,9),9,"0")||".png", "png" );
);
//
// 더 많은 아이디어(테스트되지 않았으므로 무슨 일이 일어나는지 알려주세요):
// 프레임 크기에 맞게 그래프 상자 xscale 및 yscale을 설정합니다.
// 정확한 픽셀로 작업하려는 경우.
// 이미지를 혼합하기 위해 약 .5의 알파 값을 실험합니다.
// 마스크 세그먼트 앞에 그려질 그래프의 다른 세그먼트를 정렬합니다.
// 마스크의 구멍을 통해 마커 세그먼트가 나타날 수 있습니다.영화 쌍안경.
// 데이터 대신 마스크를 이동합니다.
// 투명도가 있는 여러 레이어.시차 아이디어를 사용한 사이드 스크롤러.
// MouseTrap을 사용하여 마스크를 드래그합니다.
// 클릭 정도에 따라 MouseTrap을 사용하여 마스크를 회전해 봅니다.
// 마스크의 중심부터입니다.