2009-09-16 5 views
0

페이드 아웃을 C++에서 화면의 임의의 위치에 페이드 아웃하는 특정 시간 지연으로 페이드 아웃하는 방법은 무엇입니까?페이딩 이미지가있는 C++의 스크린 세이버

멀티 모니터 지원은 최고입니다.

작업 코드가 있거나 어디서 구할 수 있는지 알고 있다면 좋을 것입니다. 그렇지 않으면 올바른 방향으로 나를 가리켜 라. 나는 매끄럽고 느린 og flickery fade가없는 메소드를 찾고 있습니다. 스크린 세이버는 Windows XP 용입니다.

저는 C++을 모르지만 AS3, Javascript 및 PHP는 알고 있습니다. 그래서 나는 그 지식의 일부를 C++과 연관시키기를 희망했습니다.

컴파일 할 때 무엇을 사용해야합니까?

+2

화면 보호기의 기본을 넘어서 일부 이미지 기능이 필요합니다. 이것은 누군가가 C++ 프로젝트를 시작하기를 바라는 것이 아닙니다. –

답변

9

먼저 C++에서 시작한다면 Visual C++와 같은 특정 컴파일러로 시작하지 마십시오. eclipse 또는 code::blocks과 같은 컴파일러와 함께 제공되는 멋진 크로스 플랫폼 IDE를 잡으십시오. 어떤 프로젝트와 마찬가지로, 당신은 그것을 단계적으로 완료 할 수있는 더 작은 작업으로 나누기를 원할 것입니다. 너는 몇 가지 장애물이있는 것처럼 들린다. C++ 지식

  1. 부족 (우리가 한 번에 모두 여기에 있었다) 이미지에 대한 지식의
  2. 부족 (매우 일반적인 고통) 경험
  3. 부족

(우리는이 작업을 것이다) 다른 사람들이 당신을 낙담하게하지 마십시오. 당신은 이것을 할 수 있으며 아마도 당신이 생각하는 것보다 더 빨리 할 수 ​​있습니다. C++에 대한 한두 권의 책을 읽으십시오. 많은 것을 알지 못해 한 프로젝트에 참여할 수는 있지만 종종 좌절 할 것입니다. 프로젝트를 일련의 작은 목표로 분해합시다. 각 목표를 완료하면 C++에 대한 자신감이 높아질 것입니다.

  1. 이미지 혼합

는 첫째, 문제를 살펴 보자

  • 화면 캔버스 (다이렉트, OpenGL을, 비트 맵?)
  • 타이머
  • 을 w/멀티 모니터 지원 보호기
  • 윈도우 화면 이미지 블렌딩의 문제의 이미지가 활성화되어있는 창 배경으로 "페이드"하고 싶을 것이라고 가정합니다. 단색 배경을 사용하려는 경우 캔버스 새로 고침 사이에서 해당 이미지의 알파 투명도를 변경하면됩니다. 본질적으로 새로 고침 타이머를 기반으로 두 이미지의 각 픽셀의 색상 값을 평균화하려고합니다. 직접적인 측면에서

    N = 타이머 간격마다 눈금 (P3) 상관 결과의 픽셀에 대한 적색, 녹색 및 청색 화소를 찾는 (초/밀리/등)이 간격
    를 발생
    T = 틱 이미지 P1r는 = 적색 화소 1
    P2r = 이미지 2
    P3R 이미지 2에서 혼합 된 영상
    P1g 이미지 = 녹색 화소 1
    P2g = 녹색 화소에 대한 = 얻어진 적색 화소에서 적색 화소 소자
    P3g = 혼합 된 im의 합성 녹색 픽셀 요소 이미지에서 세
    P1B = 파란색, 화소 혼합 된 이미지 이제

    P3r = ((T/N * P1r) + ((N-T)/N * P2r))/2 
    P3g = ((T/N * P1g) + ((N-T)/N * P2g))/2 
    P3b = ((T/N * P1b) + ((N-T)/N * P2b))/2 
    

    의 윈도우 화면 보호기의 문제를 살펴 보자 1
    P2B는 = 이미지에서 파란색 픽셀 요소 (2)
    P3B = 결과 파란색 픽셀 요소 및 다중 모니터 지원. 이것들은 실제로 두 개의 별개의 문제입니다. Windows 화면 보호기는 실제로 특정 콜백 기능이있는 일반 .exe 컴파일 파일입니다. 그물에 당신의 화면 보호기 기능 설치에 많은 자습서를 찾아 낼 수있다. Screen Canvas를 설정할 때 멀티 모니터 지원이 실제로 중요합니다. 다음에 설명하겠습니다.

    스크린 캔버스를 참조 할 때 프로그램에서 시각적 데이터를 출력 할 영역을 언급하고 있습니다. 모든 이미지 렌더링 응용 프로그램 또는 자습서는 기본적으로이 동일한 개념을 나타냅니다. 특히 흥미로웠다면 컴퓨터 비전의 대학원 프로그램이나 학습 과정을 고려하십시오. 당신이 그것을 후회하지 않을 것을 믿어주십시오. 어쨌든, 귀하의 응용 프로그램의 기본 특성을 고려할 때, OpenGL이나 DirectX를 사용하는 것에 반대 할 것을 권장합니다. 각 응용 프로그램은 유용하기 전에 확보해야 할 응용 프로그램 별 지식을 가지고 있기 때문입니다. 반면에 이중 버퍼링과 gpu 오프 로딩과 같은 내장 된 3D 기술이 필요하다면 OpenGL (더 많은 플랫폼에 무관심)을 사용할 것입니다. 즐거운 이미지 라이브러리가 많이 있습니다.

    다중 모니터 지원은 까다 롭지 만 복잡한 문제는 아닙니다. 기본적으로 캔버스 바운드 (화면 경계)를 설정하여 여러 모니터의 지오메트리와 일치시킵니다. 같은 해상도의 여러 모니터에서 문제가되어서는 안되며, 모니터 해상도가 맞지 않아서 까다로울 수 있습니다 (화면에 캔바스 영역이 표시되지 않을 수도 있음). 이러한 문제에 대한 알려진 알고리즘 및 해결 방법이 있지만 범위를 벗어난 것일 수 있습니다.

    마지막으로 타이머에 관해서는 가장 쉬운 부분입니다 .Windows와 Linux는 이상한 방법으로 시간을 처리합니다 (MS가 STRPTIME을 구현하는 이유는 무엇입니까?). 그래서 이식성에 관심이 있다면 제 3 자 라이브러리를 사용하십시오. 그렇지 않으면 Windows의 settimer() 기본 기능을 사용하여 콜백 함수로 이미지를 렌더링하십시오. 너는 할 수있다. 이 프로그램에 전자. 예를 들어, 타이머가 매초마다 퀀텀을 벗어나면 처음 몇 개의 혼합 이미지를 캐시하고 처리 시간을 절약 할 수 있습니다. (변화하는 색상 그라디언트를 구분하는 것을 눈치 채지 못합니다.) OpenGL을 사용하는 경우 블렌드 이미지 세트를 디스플레이 목록으로 캐시 할 수 있습니다 (모든 그래픽 카드 메모리를 사용해야합니까?). 재미있는 물건, 행운을 빌어 요!

  • 0

    나는 마이크로 소프트 C++ 익스프레스를 볼 것이다. 그것은 무료이며 꽤 유능합니다. 관리되지 않는 실행 파일을 생성하기 위해 해킹하거나 이전 버전을 가져와야 할 수 있습니다.

    는 대한 tutorials를 많이 사용할 수 있습니다 나머지

    +4

    비 관리 코드를 얻으려면 C++ express를 해킹 할 필요가 없습니다. – ZippyV

    5

    "나는 C++을 잘 모릅니다,하지만 난 AS3, 자바 스크립트, 그리고 PHP가. 그래서 C++로 지식의 일부를 관련 기대하고 있었는데 알고있다. "

    오, 제발 당신이 놀랄 것 같아요. C++을 보려면 :

    • 주문 적어도 하나 또는 두 개의 아주 좋은 책을 (here 참조). 별로 좋지 않은 책은 사지 마라. 그들은 당신이 나중에 진전을 위해 잊지 말아야 할 습관을 가르쳐 줄 것입니다.
    • 사이에 많은 읽기 기능을 갖춘 실전 코드를 많이 작성해야합니다. 처음 몇 주일 만에 컴파일러는 이해하기 어려운 오류 메시지를 쏟아 내고 코드가 계속 충돌하며 코드를 숙고하는 숙련 된 C++ 프로그래머는 혐오 스러울 정도로 손을 던질 것입니다. 그리고 항상 귀하의 잘못입니다.
    • 많은 시간을 배워야 계획을 세우십시오. 그리고 나는 진짜 많이을 의미합니다. 아무리 많은 시간을 바 꾸었더라도 "더미"에서 "초보자"로 업그레이드 할 때까지 적어도 2 달은 걸릴 것입니다.
    • 실제 전문가가 되려고 끊임없이 책과 기사를 읽고, 뉴스 그룹과 토론 포럼에 많은 시간을 할애하고, 다른 사람들로부터 배우고, 주변을 둘러싼 모든 벽에 머리를 댑니다. 책상.
    • C++로 10 년 동안 프로그래밍 한 후에도 매주 적어도 한 번은 알지 못했던 것을 배우기 위해 준비하십시오.
    • 잠시 동안 내가 이것을 과장하지 않을 수도 있다고 상상해보십시오. 설명에 대한

    편집 : 나는 그들이 아주 좋은이기 때문에, 꽤 지점 많이하고, 일반적으로는 격려 내 호언 장담에도 불구하고 나에 의해 지원됩니다, 헌터 데이비스 '와 원소의 답변을 모두 상향 투표했습니다 거기. 사실, 많은 사람들이 실제로 C++에 대해 많이 알지 못하더라도 해골 예제가 주어지면 많은 사람들이 C/C++에서 해킹 할 수 있다는 것을 의심하지 않습니다. 계속해서 시도해보십시오. 합리적인 시간 내에 화면 보호기를 발견 할 수있는 좋은 기회입니다. 그러나. "C/C++로 무언가를 함께 해킹"할 수 있다는 것은 "C++을 배웠다"는 것과는 거리가 멀다. (그리고 나는 매우까지 의미합니다.)

    C++는 믿을 수없는 복잡하고 의미가 있으며 완고한 동물입니다. 나는 또한 그것이 거의 숨이 멎을 정도로 아름답다고 생각하지만, 그것은 아마도 매우 높은 산에서 바라본 전망을 반영 할 것입니다. 당신이 아름다움을 감상 할 수있는 지점에 도달하는 것은 꽤 어렵습니다.

    +0

    Seconded. 그것은 산에서 매우 보람있는 여행이지만, 당신이 거기에 도착할 때 당신은 땀을 흘리게 될 예정이다. 행운을 빕니다! > C++은 믿을 수 없을만큼 복잡하고 의미 있고 완고한 동물입니다. 나는 또한 거의 숨이 멎을 정도로 아름답다고 생각하지만, 아마도 그것은 매우 높은 산에서 바라 보는 전망을 비 춥니 다. 아름다움을 감상 할 수있는 지점까지 도달하는 것은 꽤 어렵습니다. –

    1

    C++은 복잡한 언어이며 sbi가 나타내는 모든 내용은 사실입니다 (10 년의 상용 C++ 프로그래밍 후에도 여전히 배울 점이 있습니다).하지만 다른 언어를 사용하면 자신감이 있다면 a) 여기에 언급 된 컴파일러 중 하나를 설치하십시오 (Windows 프로그래밍에 대한 빠른 내용으로 VC 제안) b) Windows GDI를 사용하여 간단한 작업을 수행하는 화면 보호기의 샘플 코드 찾기 화면 보호기에 MS 설명서 내의 코드) c) 원하는대로이 코드를 수정하십시오.

    당신의 제한된 요구 조건에서 나는 GDI ++ 라이브러리가 당신이 원활하게 요구하는 알파 페이드를 수행 할 수있는 충분한 힘을 가지고 있다는 것을 알게 될 것이라고 생각합니다.

    관련 문제