Kopiowanie na Canvasa kształtów innych niż prostokąt

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

Kopiowanie na Canvasa kształtów innych niż prostokąt

Nowy postprzez Corvis » piątek, 11 grudnia 2009, 15:25

Witam

W tematcie o Gradieńcie dostałem bardzo dobrą pomoc odnośnie sposobu jego rysowania co mi się udało.


Kolejne moje pytanie dotyczy kopiowania rysunku o to kod :

Kod: Zaznacz cały
    HDC hdc = GetDC(Form1->Handle);   
    Label1->Caption = 255<<8;
    if(BeginPath(hdc)) {
        POINT pkt[4] = {{100,300},{200,100},{300,400},{200,250}};
        Polygon(hdc,pkt,4);

        if(EndPath(hdc) && SelectClipPath(hdc,RGN_COPY)) {
            TRIVERTEX      trivert[2];
            GRADIENT_RECT   grad_rect;

            grad_rect.UpperLeft  = 0;
            grad_rect.LowerRight = 1;

            trivert [0] .x      = 100;
            trivert [0] .y      = 100;
            trivert [0] .Red    = 255<<8;
            trivert [0] .Green  = 0;
            trivert [0] .Blue   = 0;
 

            trivert [1] .x      = 500;
            trivert [1] .y      = 250;
           
            trivert [1] .Red    = 0;
            trivert [1] .Green  = 255<<8;
            trivert [1] .Blue   = 0;
         

            GradientFill(hdc, trivert,2,&grad_rect,1,GRADIENT_FILL_RECT_V);

            trivert [0] .x      = 100;
            trivert [0] .y      = 250;
           
            trivert [0] .Red    = 0;
            trivert [0] .Green  = 255<<8;
            trivert [0] .Blue   = 0;
            trivert [0] .Alpha  = 0;

            trivert [1] .x      = 500;
            trivert [1] .y      = 400;
           
            trivert [1] .Red    = 0;
            trivert [1] .Green  = 0;
            trivert [1] .Blue   = 255<<8;

            GradientFill(hdc, trivert,2,&grad_rect,1,GRADIENT_FILL_RECT_V);

           
            Graphics::TBitmap* bmp = new Graphics::TBitmap;
            Graphics::TCanvas* cnvs = new Graphics::TCanvas;

            cnvs->Handle = hdc;

            TRect rect = cnvs->ClipRect;
            rect.Right = rect.Right - rect.Left;
            rect.Bottom = rect.Bottom - rect.Top;
            rect.Top = 0;
            rect.Left = 0;

            bmp->Width = rect.Right;
            bmp->Height= rect.Bottom;
           
            bmp->Canvas->CopyRect(rect, cnvs,cnvs->ClipRect);

            Image1->Picture->Bitmap = bmp;

            delete bmp;
            delete cnvs;

        }
    }



Chodzi o to, że muszę skopiować teraz ten gradient na jaks bmp ALE pojawa się problem bo muszę skopiować sam rysunek bez jego obszaru obok jeżeli kopjuje go tak jak w kodzie którym podałem otrzymuje efekty jak na załącznikach.

Ma ktoś może jakiś pomysł jak to przekopiować bez tych śmieci ???

Pozdrawiam i z góry dzięki za wyrozumiałość
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Kopiowanie na Canvasa kształtów innych niż prostokąt

Nowy postprzez polymorphism » piątek, 11 grudnia 2009, 15:45

< usunąłem część, która była bez sensu 8-) >

Następna rzecz to to, że traktujesz kontekst okna jak kontekst pamięciowy z podpiętą bitmapą. Błąd. Zawartość okna może się zmienić w każdej chwili, jest ulotna. Okno traktuj jako miejsce docelowe, tylko do wizualizacji, nigdy jako źródło.
Ostatnio edytowano piątek, 11 grudnia 2009, 17:21 przez polymorphism, łącznie edytowano 2 razy
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2157
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: Kopiowanie na Canvasa kształtów innych niż prostokąt

Nowy postprzez Corvis » piątek, 11 grudnia 2009, 15:52

Rysowanie w miejscu docelowym nie może być to będzie wykres 3d podłączony do jakiejś transmisji danych i to bardzo szybko chodzić a sprawdziłem juz odrysowywanie tego sposobu w zegarku i strasznie komputer to boli pomijam fakt dyskoteki kolorowej :)

Więc zostaje mi tylko 2 opcja chyba :)

Dzięki
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Kopiowanie na Canvasa kształtów innych niż prostokąt

Nowy postprzez polymorphism » piątek, 11 grudnia 2009, 16:01

Corvis napisał(a):Więc zostaje mi tylko 2 opcja chyba :)

Nie rozumiem, przecież opcja druga to właśnie rysowanie w miejscu docelowym.

____
p.s. w przyszłości postaraj się pisać ze znakami interpunkcyjnymi, bo ciężko się ciebie czyta.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2157
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: Kopiowanie na Canvasa kształtów innych niż prostokąt

Nowy postprzez Corvis » piątek, 11 grudnia 2009, 16:17

tzn opcja numer 1, Sorry ;)

Ok, będe pamiętał.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Kopiowanie na Canvasa kształtów innych niż prostokąt

Nowy postprzez polymorphism » piątek, 11 grudnia 2009, 17:03

Tak sobie myśle, że rozwiązaniem problemu jest po prostu składanie wszystkiego w bitmapie. W tym poście, w drugim akapicie, wskazałem "błąd", który, jeśli jest powodem problemów (a sądzę, że jest), nie wymaga stosowania rozwiązań, które podałem. Czyli rysujesz na bitmapie, bitmapę kopiujesz na okno i jeśli trzeba, kopiujesz do innej bitmapy.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2157
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: Kopiowanie na Canvasa kształtów innych niż prostokąt

Nowy postprzez Corvis » poniedziałek, 14 grudnia 2009, 11:38

Dzięki,

Ale Canvas bitmapy nie ma metody

Kod: Zaznacz cały
GradientFill(hdc, trivert,2,&grad_rect,1,GRADIENT_FILL_RECT_V);


Jeżeli by miał, to wogóle by nie było problemu, bo można by było zrobić tak jak mówisz :)

EDIT: I odpowiedź na pytanie powyżej dla potomnych,

należy pobrać uchwyt do bmp na której się rysuje czyli :

Kod: Zaznacz cały
HDC hdc = Bitmap->Canvas->Handle; 


i wtedy wszystko jest super :)


Pozdrawiam,
dzięki za wyrozumiałość :)
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje multimedialne, graficzne

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron