Zapis PictureBox'a

0

Witam.
Mam problem jak w temacie z tym, że do pictureboxa wczytuje obrazek, a później wstawiam na ten obrazek (na pictureboxa) kontrolkę. Jak zapisać pictureboxa tak żeby były widoczne wstawione kontrolki?
W kodzie to wygląda mniej więcej tak:

  pb_znacznik znak = new pb_znacznik(opis);
            znak.Location = new Point(x1, y1);
            znak.Width = x2 - x1;
            znak.Height = y2 - y1;
            znak.Parent = pictureBox1;                  
            pictureBox1.Controls.Add(znak);
pictureBox1.Image.Save("C:\\test.jpg");
            

Domyślam się, że problemem może być sposób w jaki dodaje kontrolę bo zapisuje obrazek z pictureboxa a nie samego pictureboxa, ale już nie mam pomysłu jak to zmienić.
Jak są w kodzie literówki to sorry pisałem z palca.

1

Mam problem jak w temacie z tym, że do pictureboxa wczytuje obrazek, a później wstawiam na ten obrazek (na pictureboxa) kontrolkę. Jak zapisać pictureboxa tak żeby były widoczne wstawione kontrolki?

A nie możesz po prostu rysować po PictureBox (po jego kanwie)? Poza tym co to za klasa pb_znacznik?

0

@furious programming Nie, bo to co rysuje muszę później móc swobodnie przenosić, rozciągać i usuwać.
pb_znacznik to taka moja kontrolka, rectangle z napisem w środku. W ostateczności pójdę na łatwiznę i będę robił screena i go wycinał, ale boje się, że przy dużym rozmiarze okna złapie w kadr pasek windows lub coś gorszego. ;)

1

Nie, bo to co rysuje muszę później móc swobodnie przenosić, rozciągać i usuwać.

No więc skoro musi to być oddzielny komponent to zapisz zawartość tej kontrolki + informacje o tej dodatkowej np. do strumienia i sru do pliku; Przy ładowaniu wczytaj plik do strumienia, uzupełnij PictureBox i utwórz dynamicznie kontrolkę; Tylko dalej nie wiem, czy potrzebujesz zapisać zawartość PictureBox razem z grafiką kontrolki pb_znacznik, czy nie, bo nie wiem jak rozumieć to zdanie:

W ostateczności pójdę na łatwiznę i będę robił screena i go wycinał

Tylko że jak zrobisz screen'a to potem jak oddzielisz wcześniejszą zawartość PictureBox od Twojej kontrolki? Trzeba by zaimplementować jakiś system wastw wraz z zpisem do/odczytem z pliku, ale nie wiem czy to będzie konieczne;

0

Screen lub zapis zawartości ma być jako efekt końcowy nie edytowalny, a schemat oznaczeń i import do jakiegoś pliku robię i tak. A w tej sprawie to parsery do xml'a/ini gotowe są dobre? Czy pisać własny uproszczony na swoje potrzeby?
Jak ktoś wpadnie na pomysł jak zrobić ten zapis pictureboxa to będę wdzięczny bo zrobiłem screen i to wygląda fatalnie.

1

Screen lub zapis zawartości ma być jako efekt końcowy nie edytowalny

Czyli eksport obrazu zawierającego zawartość PictureBox oraz "wtopionego" pb_znacznik będzie tylko jednostronny? No więc pozostaje Ci w tej sytuacji albo zapis samych właściwości kontrolek PictureBox i pb_znacznik do jakiegoś pliku (czy to XML czy INI to nie ma znaczenia), lub całych komponentów do strumienia i do pliku pod warunkiem, że będziesz potrzebował z powrotem wczytać dane do kontrolek i je dowolnie modyfikować;

A w tej sprawie to parsery do xml'a/ini gotowe są dobre? Czy pisać własny uproszczony na swoje potrzeby?

Są dobre, bo są gotowe :] Jak masz czas i chęci to napisz swój w ramach ćwiczeń, a jeśli nie masz zbyt wiele czasu czy nie bardzo wiesz jak to zrobić to wykorzystaj gotowe rozwiązania - zaoszczędzisz sobie czasu i nerwów w razie ewentualnych bugów;

zrobiłem screen i to wygląda fatalnie.

Co to znaczy "fatalnie"? Eksportujesz to do JPEG z mocną kompresją? Czy coś rozjeżdża się/jest źle ułożone? Chodzi o jakość wygenerowanej grafiki, czy o jej rozmiar/ułożenie elementów?

0

Co to znaczy "fatalnie"? Eksportujesz to do JPEG z mocną kompresją? Czy coś rozjeżdża się/jest źle ułożone? Chodzi o jakość wygenerowanej grafiki, czy o jej rozmiar/ułożenie elementów?

Nie mogę sobie poradzić z równym wycięciem pictureboxa z reszty okna. Nie ważne jak obrabiam to zawsze fragment reszty Forma mi wpada.

1

Nie mogę sobie poradzić z równym wycięciem pictureboxa z reszty okna.

A nie powinieneś mieć żadnych problemów; Macie w C# na pewno funkcje tłumaczące współrzędne okna ("wewnętrzne", gdzie punkt [0, 0] określa lewy górny róg formularza, nie screen'a) na współrzędne screen'a (nie wiem jak to nazwać, najtrafniej to chyba wyświetlacz/ekran) - ClientToScreen i ScreenToClient;

Jeśli znasz współrzędne kontrolki na formularzu (a znasz, bo możesz odczytać właściwości Left i Top) to wiesz dokładnie co do piksela gdzie znajduje się komponent, a także znasz jego rozmiary - właściwości Height i Width kontrolki;

Nie wiem, czy robisz zrzut całego ekranu czy tylko samego formularza, ale jeśli całego ekranu to podane wyżej funkcje rozwiążą problem;

0

Nie rozumiem po kiego ci picturebox jeżeli i tak na niego nakładasz inne kontrolki.
Weź normalny panel, nakładasz na niego inne kontrolki tak jak robisz z tym picturebox'em.
A potem używasz tego: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.drawtobitmap.aspx
I masz to w bitmapie.

0

@furious programming problem jest w tym, że funkcja zapisu jest w rozwijanym menu i po prostu fragment menu wchodzi na screena.
@_13th_Dragon na szybko próbowałem wklepać tak jak mówisz, obrazek ustawiłem jako tło panelu, ale DrawToBitmap zapisał mi bez naniesionych na niego kontrolek. ;/

0

problem jest w tym, że funkcja zapisu jest w rozwijanym menu i po prostu fragment menu wchodzi na screena.

To wykonaj robienie zrzutu po zniknięciu menu albo odczekaj np. 100ms i dopiero wtedy zrób zrzut;

Sposób @_13th_Dragon będzie lepszy, bo żadne menu ani inne elementy, które mogą przesłonić kontrolkę nie znajdą się na zrzucie; Rekurencja wskazana, więc jak nie wiesz jak to zrobić to poczytaj i przetestuj;

0

Dobra dzięki za pomoc.
Zrobiłem tego zrzut aktywnego okna i menu samo uciekło. Do tego 2 pomocnicze kwadraty (przynajmniej się nauczyłem nimi posługiwać) i mam obrazek. Co prawda stracił 2 pixele, na bokach ale wygląda ok (testowane na kilku różnych).
Teraz mam inny pomysł bo za sam projekt zabrałem się od tyłka strony bo jak najpierw bym miał parser i zapisywał gdzieś kontrolkę, to na koniec przy zapisie obrazka mógłbym robić bitmapy z kontrolki i "wtapiać" je na obrazek główny.
Na przyszłość mam nauczkę.
Jeszcze raz dzięki za pomoc.
BTW: jak będę miał chwile czasu to protestuję dodawanie kontrolek w czasie działania programu. Bo każdą inną kontrolkę dodaje mi normalnie i DrawToBitmap chwyta ją na zapisie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1