Corel FORUM
Forum użytkowników programów firmy Corel. Grafika wektorowa, rastrowa i obróbka zdjęć cyfrowych

Makra - Automatyczny zapis wszystkich bitmap z dokumentu

Bunch - 4 Maj 2011, 13:52
Temat postu: Automatyczny zapis wszystkich bitmap z dokumentu
Witam.

Dajmy na to, że mam projekt w którym wyciąłem ze 20 bitmap.
Czy istnieje w tym programie opcja by program automatycznie zapisał wszystkie bitmapy w osobnych plikach lub projektach?

miszcz301 - 4 Maj 2011, 13:54

http://corel.wodip.opole....opic.php?t=4567
DzumA - 78 - 4 Maj 2011, 13:55

jak masz każdą bitmapę na osobnej stronie

skorzystaj z MAKRO: File Converter

Narzędzia/Makra/Uruchom Makro...

Bunch - 4 Maj 2011, 14:44

Przede wszystkim dziękuję za podanie namiarów, to gdzie mam się udać w menu programu.

DzumA - 78 napisał/a:
jak masz każdą bitmapę na osobnej stronie


A jak mam wszystkie bitmapy na jednej i tej samej stronie?

chezare - 4 Maj 2011, 21:29

Bunch, nie masz większych problemów? Jak byś miał 200 albo 2000 bitmap, to byłby kłopot, a tak to jest 3 min. roboty. Głupoty gadam, 3 min. to by mnie to zajęło, tobie góra 2 :-) Klikasz bitmapę, ctr+E (eksport) cmx (bo wyszparowane) i Enter. Powtarzasz operację 20 razy i po robocie.
Tak poważnie, to myślę, że jakbym wypił jeszcze jedno piwo, to mógłbym napisać jakiś skrypcik, który by to zrobił?

Bunch - 5 Maj 2011, 22:09

A czemu niby mi szybciej miałoby to zając niż Tobie?
Nie widzę powodu takiej sytuacji.
Mówisz, że albo metodą "MARKA" albo eksportować ZAZNACZONY obiekt do formatu *.cmx?

Bunch - 19 Maj 2011, 21:56

Otóż... program mi zapisuje, ale ŁĄCZY wszystkie obecne na stronach obiekty, a ja - jak mówiłem przecież - chce by mi zapisał każdy jeden obiekt z osobna. najlepiej do PNG bez tła (bo mam wycięte obiekty).

I jak to zrobić?

Proszę o wskazówki.

Cysorz - 19 Maj 2011, 22:05

Zaznaczasz obiekt (lub jego grupę) i przy eksporcie zaznaczasz "Eksportuj tylko zaznaczone".
Bunch - 20 Maj 2011, 20:24

Malutki napisał/a:
Zaznaczasz obiekt (lub jego grupę) i przy eksporcie zaznaczasz "Eksportuj tylko zaznaczone".


Malutki - nie działa.

Program mi zapisuje, ale też ŁĄCZY wszystkie obecne na stronach obiekty a ja chce by mi zapisał każdy jeden obiekt z osobna.
I jak to zrobić? No, podaliście rozwiązanie, które nie działa.

Cysorz - 20 Maj 2011, 20:58

Na bitmapy musi działać! Chyba, że chcesz żeby interaktywne efekty (przeźroczystość, cień itp.) też zostały zapisane? Wtedy nie ma takiej możliwości. Zamiast krzyczeć "nie działa", "nie da się" i wyklinać program warto pomyśleć czy klient ma mieć możliwość np. edycji cienia czy przeźroczystości. Bo jak nie to zwykły *.gif czy *.png na pewno wystarczy...
Ja sam nigdy nie eksportuję z Corela bezpośrednio takich bitmap - robię to w ten sposób, że zapisuję daną bitmapę (czy też cały projekt) w dwa, trzy razy wyższej rozdzielczości, otwieram to w PS i tam "kończę". Ale to już trochę zmiana tematu, więc potraktujmy to jako off-topic czy jak to się tam nazywa ;)

Bunch - 20 Maj 2011, 21:08

Po pierwsze, jak nie ma? Jak nie ma możliwości? MUSI SIĘ DAĆ. Bo PNG posiada przeźroczystość. Więc na pewno się DA tak zapisać. Jak możesz twierdzić, ze się nie da?

Po drugie, akurat tym razem chcę zwykłą, wyciętą bitmapę zapisać...
Malutki, JAK BOGA KOCHAM - NIE DZIAŁA. Robię wg instrukcji Twojej i nic.
Eksportuje mi JEDNĄ, WIELKĄ GRAFIKĘ z WSZYSTKIMI zaznaczonymi bitmapami, jeden gigantyczny płacht z całej strony będący jedną grafiką.

tegraf - 20 Maj 2011, 21:14

Bunch napisał/a:
z WSZYSTKIMI zaznaczonymi bitmapami


I dobrze działa. Z wszystkimi zaznaczonymi... jak piszesz.

Chcesz każdą z osobna? Zaznacz pierwszą i wyeksportuj. Zaznacz drugą i wyeksportuj. I tak do końca... :-D Innego sposobu nie znam.

Pozdrawiam

Bunch - 20 Maj 2011, 21:19

No nie.... Weź mnie nie rozbrajaj takim komentarzem :mrgreen:
"i dobrze, bo działa" , "a jak nie to ręcznie, po kolei"

Skoro się jakoś ta, to chciałbym wiedzieć jak.
Czekam na Malutkiego, bo on coś tam się wypowiadał.

Tak, chcę każdą z osobna. Poleciliście tryb makro - nie działa. Efekt dokładnie taki sam (eksportuje scalone do jednej, dużej bitmapy wszystkie).

Photoshop ma taką opcję - ciekawostka.

Bunch - 23 Maj 2011, 11:18

Malutki napisał/a:
Na bitmapy musi działać!

Nie działa tak jak bym tego chciał. Czy to znaczy, że Corel nie potrafi tego zrobić?

miszcz301 - 23 Maj 2011, 11:50

zobacz
Bunch - 23 Maj 2011, 13:30

Ty nie rozumiesz.

Po pierwsze: ja chcę zapisać w sposób automatyczny wszystkie zaznaczone elementy w pliku do osobnych grafik. Sposób Malutkiego z użyciem Makra NIE DZIAŁA.

Ja wiem jak wygląda proces wybrania zapisu do pliku dla poszczególnych elementów. Wiem w co się wchodzi i gdzie się klika.

Natomiast program zapisuje wszystkie te zaznaczone bitmapy czy cokolwiek innego na jednej płaszczyźnie. Dostaję potem jeden obrazek z wszystkimi bitmapami, a nie kilka obrazków na którym jest każda jedna bitmapa z osobna. Przecież już pisałem o tym post wcześniej.
Sposób Malutkiego z użyciem Makra NIE DZIAŁA. Też nie działa, niczym się on nie różni od ręcznego zapisywania.

Nie wiecie jak to zrobić?
Nagrać Ci film, który udowodni, że to nie działa, malutki?

Cysorz - 23 Maj 2011, 16:12

*.png to prosty format bitmapowy. Jak Ty chcesz to zapisać? Przecież program MUSI przy eksporcie wszystko spłaszczyć do jednej warstwy! Chcesz mieć później wszystkie obiekty na oddzielnych warstwach to zapisz to po prostu w Corelu ("zapisz tylko zaznaczone") i będziesz miał wszystko w jednym. Jak chcesz mieć każdą bitmapę w innym pliku to eksportuj/zapisuj je pojedynczo!
Zresztą nie widzę sensu w takiej operacji (nie napisałeś czemu ma to służyć), więc być może nie mogę zrozumieć co chcesz osiągnąć...

Bunch - 24 Maj 2011, 13:52

Malutki, w tej zagwozdce nie jest ważne do czego ma mi to służyć, jest ważne co chcę osiągnąć. Nie przez co, a co. A chcę aby program zapisywał mi wszystkie zaznaczone elementy z całego dokumentu, lub z jednej strony, do osobnych plików na dysku. Jak na przykład PNG. Już rozumiesz? Przecież mówiłem już wcześniej o co mi chodzi.

Cytat:
*.png to prosty format bitmapowy. Jak Ty chcesz to zapisać? Przecież program MUSI przy eksporcie wszystko spłaszczyć do jednej warstwy!

To niechże spłaszczy! Tylko chcę mieć każdy obiekt jaki był w programie w osobnych plikach.
A po eksporcie wychodzi mi jedna wielka tekstura. Nie rozumiesz Malutki (co mnie dziwi).

Wyciąłem sobie w projekcie programu dziesięć różnych psich kup. Różne rodzaje. Gęste, rzadkie, brązowe, czarne (nawet białe!), duże, małe, z kawałkami owoców i rodzynek, bez.
I teraz chcę by mi program zapisał je do osobnych plików na dysk, w sposób automatyczny.
Czyli abym coś zrobił i po tej operacji na swym dysku dojrzał pliki:

Psia kupa1.png
Psia kupa2.png
Psia kupa3.png
Psia kupa4.png
Psia kupa5.png
Psia kupa6.png
Psia kupa7.png
Psia kupa8.png
Psia kupa9.png
Psia kupa10.png


Zapisane tam gdzie sobie życzyłem. Automatycznie.

A póki co albo mam to ręcznie robić, albo makra nic nie dają bo dostaję jeden zapisany plik an dysk z wszystkimi obiektami na niej. Co za idiotyzm, po co to/ Skoro nic nie zmieniło?

Już kumasz co chcę? Ktoś potem mi powie niechże pan wyciągnie i da mi te wszystkie fotki z pańskiej setki plakatów bo mi się podobają i chcę je mieć jako poszczególne pliki na dysku swoim. I co? Mam ręcznie zapisywać ze 100 projektów?
Albo inny - chyba najlepszy - przykład. Jakiś grafik wycina artykuły do gazetki reklamowej. Dostał fotki, wyciął, złożył gazetkę i koniec. A za jakiś czas "jest potrzeba" skorzystania z już wyciętych zdjęć. To zamiast grzebać w projektach, lepiej sobie tak automatycznie je z nich wyciągnąć i posegregować na dysku, a potem już importować do nowego projektu gotowe, wycięte pliki.

Cysorz - 24 Maj 2011, 16:28

Tylko ręcznie.
chezare - 24 Maj 2011, 16:50

Malutki, przy całym szacunku, wydaje mi się, że da się taki skrypt napisać.
Na pierwszy rzut okiem wydaje się to całkiem proste, choć komuś kto się pisaniem makr nie zajmował, a ja do takich należę, może chwilę zająć. Program wie co jest zaznaczone, a jak on wie, to da się tę informację od niego po dobroci, albo pod przymusem uzyskać :-)
Szaman by się przydał, ale on pisze tylko profesjonalne makra, a to zadanie wygląda na bardziej amatorskie.

maroQ - 26 Maj 2011, 23:16

Dawno mnie tu nie było i trochę czasu minęło nim przypomniałem sobie hasło.
Zresztą ostatnio cały czas zabiera mi remont biura i nie mam czasu na niedochodowe fora.

Ponieważ jednak program był naprawdę prosty oraz być może mi się przyda więc oto on:
Kod:
Public Sub ExportThisShit()
    Dim s As Shape
    Dim expflt As ExportFilter
    Dim dirName, report As String
    Dim cnt As Integer
   
    dirName = InputBox("Wprowadź lokalizację plików (katalog):", "Ścieżka do plików", "H:\kosz\pliki\")
   
    cnt = 0
    report = "Wygenerowano pliki:"
    For Each s In ActivePage.Shapes
        If s.Type = cdrBitmapShape Then
            Set expflt = s.Bitmap.SaveAs(dirName & "plik_" & cnt & ".png", cdrPNG, cdrCompressionNone)
            With expflt
                .Interlaced = True
                .Transparency = 0 ' FilterPNGLib.pngNone
                .InvertMask = False
                .Finish
            End With
            report = report & vbNewLine & "  - " & "plik_" & cnt & ".png"
            cnt = cnt + 1
        End If
    Next s
    report = report & vbNewLine & "i zapisano je w katalogu: " & dirName
   
    MsgBox report, vbInformation, "Zapis zakończony sukcesem:"
End Sub


Ścieżka do katalogu przypisana na stałe, chociaż w trochę uciążliwy sposób można ją za każdym razem zmieniać. By zrobić to lepiej trzeba by wyjść z ograniczonego VBA do VB6 lub VB.Net i tam dodać opcję wyboru katalogu. Można też dodać odpowiednio wykonaną bibliotekę do VBA ale nie chce mi się tłumaczyć jak to się robi. Zresztą wujek google zna wszystkie odpowiedzi.

Cieszcie się i radujcie bo ten program jest całkiem za free... co mnie wcale nie cieszy, ale za coś takiego raczej bym nie mógł nic skasować.

malutki napisał/a:
Tylko ręcznie.

...tak, właściwie to makro też robi to wszystko ręcznie :)

chezare - 26 Maj 2011, 23:28

Matko z córką, nie miałem pojęcia, że posiadam umiejętności przywoływania szamana :-)
Cześć MaroQ, a dlaczego by nie? e=mc2 przecież jeszcze prostsze i krótsze?

kula69 - 31 Maj 2011, 07:17

Noishnorarrix nawet nie pokusił się o tłumaczenie i umieszczenie w odpowiednim miejscu dziwne zwyczaje
maroQ - 31 Maj 2011, 08:54

@kula69:
Noishnorarrix to zwykły spamer tj. bot który umieszcza spamowe treści na forach i blogach. Na mojej stronie regularnie dostaję komentarze tego typu do sprawdzenia lub do spamu. Bez walidacji obrazkiem i to googlowym nie powinno być możliwości pisania postów na forum. To tak dla bezpieczeństwa, gdyż umieszczenie linku do strony z wirusami wystarcza do wygenerowania złej opini dla strony, a to powoduje że później np. firefox i chrome blokują wstęp na dany serwer.

Ta wiadomość została napisana przez Szamana bez logowania. Tak więc itak nie da się powiedzieć czy to napewno szaman pisze czy też to jakiś ludek podający się za szamana. :D

Moim zdaniem tylko zalogowani powinni mieć możliwość pisania, a jeśli nie to trzeba trochę lepiej zabezpieczyć forum.

Bunch - 5 Czerwiec 2011, 12:11

Dzięki, zapewne to jest skrypt, który trzeba gdzieś wklepać, zapisać czy ustawić. Dziękuję.
Ale parę rzeczy jest dla mnie niejasne.
Nie wiem co z nim zrobić.

Czy mam coś zmieniać w tych linijkach?

1. Wprowadź lokalizację plików (katalog):
2. Ścieżka do plików
3. H:\kosz\pliki\


Co odpowiada za co? Przed wklejeniem gdzieś tego kodu mam zmieniać mu ręcznie ścieżki źródłowe? I w pozycji numer jeden o jaki katalog i lokalizację plików chodzi? Mam tu wpisać lokalizację pliku CDR który zawiera ileś tam grafik? Czy co innego?
Pozycja numer dwa - ścieżka do jakich plików? O jakie PLIKI chodzi?
Numer trzy - kosz. Co to jest za wartość i po co? Co tam ma być?

Nie wiem o co chodzi w ogóle, to jakaś tautologia dla mnie :roll: Nie wiem co ja mam z tym zrobić.

No i oprócz tego druga sprawa. Mam to wkleić (ten cały kod) do pliku tekstowego i zapisać pod JAKĄ nazwą? Bo jak rozumiem to potem w programie wskazuje zapisany skrypt makra do zaimportowania, i właśnie wskazuję ten plik jaki utworzyłem. Tak? Tak to działa?
I rozumiem też, że aby zachować przeźroczystość to muszę wpisać "1" tam gdzie jest obecnie "0" przy napisie "transparency", tak?

Dobra, przyznam się bez bicia, że nie wiem. Dziękuję za ten skrypt.
Ale nie wiem co dalej mam z tym zrobić. :cry:

Pomożecie?



Poniżej jeszcze raz skrypt tego Szamana (nie wiem skąd ta nazwa skoro nick ma inny):

Kod:
Public Sub ExportThisShit()
    Dim s As Shape
    Dim expflt As ExportFilter
    Dim dirName, report As String
    Dim cnt As Integer
   
    dirName = InputBox("Wprowadź lokalizację plików (katalog):", "Ścieżka do plików", "H:\kosz\pliki\")
   
    cnt = 0
    report = "Wygenerowano pliki:"
    For Each s In ActivePage.Shapes
        If s.Type = cdrBitmapShape Then
            Set expflt = s.Bitmap.SaveAs(dirName & "plik_" & cnt & ".png", cdrPNG, cdrCompressionNone)
            With expflt
                .Interlaced = True
                .Transparency = 0 ' FilterPNGLib.pngNone
                .InvertMask = False
                .Finish
            End With
            report = report & vbNewLine & "  - " & "plik_" & cnt & ".png"
            cnt = cnt + 1
        End If
    Next s
    report = report & vbNewLine & "i zapisano je w katalogu: " & dirName
   
    MsgBox report, vbInformation, "Zapis zakończony sukcesem:"
End Sub

chezare - 5 Czerwiec 2011, 13:45

Bunch, ja wiem skąd dopisek pod nickiem. Jak już zapewne zauważyłeś, to MaroQ zajmuje się zawodowo pisaniem makr i pewnie stąd założenie, że ty rozbebeszając Corela w poszukiwaniu kolejnych błędów już dawno trafiłeś w Narzędzia i do edytora visual basica, bo to tam musi się znaleźć ten tekst.
To co napisałeś na niebiesko, najlepiej wyjaśni ci ten obrazek

To są po prostu teksty, które wyświetli makro w oknie z pytaniem o to gdzie obrazki mają być zapisane. Przy okazji, to makro zapisze wszystkie obrazki do wskazanego katalogu, to czy zaznaczyłeś wszystkie bitmapy czy tylko jedną nie ma znaczenia. Jak są przezroczyste, to będzie kłopot, bo makro traktuje wszystkie jak leci jednakowo. Po drugie, jak w okienko z pytaniem o to gdzie mają zostać zapisane obrazki podasz nieistniejący katalog, to nic ci się nie zapisze, bo makro nie tworzy folderu w przypadku jego braku. Dla pocieszenia powiem ci, że czy te obrazki się gdzieś zapiszą czy nie, to makro i tak pochwali się sukcesem jaki osiągnęło :-)
Jeśli teraz masz zamiar napisać coś głupiego pod adresem Szamana, to się zastanów żeby cię jakaś klątwa nie dosięgła :-) Ja bym to makro zmodyfikował, ale po pierwsze nie jest moje, a po drugie, nie wiem jak :-)
Gdybyś jednak uznał, że może ci się ono do czegoś przydać, to poradziłbym zrobić tak:
Uruchomić Corela i z menu wybrać Narzędzia → Visual Basic → Record
Rozpocznie to nagrywanie makra. Teraz program każe ci wpisać nazwę makra i jak ma zostać zapisane. Do wyboru masz aktualnie otwarty dokument (domyślnie) lub wybierasz coś z listy. Jak wybierzesz GlobalMacro, to będziesz miał do niego dostęp z każdego dokumentu. Możesz jeszcze dodać opis makra. Jak Wpisałeś nazwę, tutaj lepiej daruj sobie jakieś fantazyjne nazwy z ą ę czy spacjami, bo tak nie można i wybrałeś z listy GlobalMacro, to klikasz OK. Nic się nie dzieje, bo program czeka na to co zrobisz. Najlepiej nic nie rób, tylko ponownie udaj się do Narzędzia → Visual Basic i wybierz Stop.
Makro zostało zarejestrowane. Teraz musisz się do niego dostać żeby zmodyfikować jego zawartość. Znowu narzędzia → visual basic i visual basic editor (Alt+F11).
Szukasz czegoś takiego:

Skasuj cały wygenerowany tekst i skopiuj w jego miejsce makro Szamana.
Od tej pory będziesz mógł uruchamiać makro z każdego dokumentu wybierając narzędzia visual basic i play, z listy musisz wybrać gloabalmacro i na wyświetlonej liście nazwę swojego makra. Pewnie da się to prościej zrobić, ale upał powoduje, że jakoś opornie mi się myśli.

Bunch - 8 Czerwiec 2011, 12:43

Chezarre, jak zwykle, dzięki za opis. Jednak i tak to wszystko na nic bowiem makro Szamana nie działa.

Robię tak jak to opisałeś, czyli wpisuję i wybieram swoją nazwę:




Wklejam wszystko zgodnie z opisem (co ciekawe wpisanej nazwy mojego Makra nie widać w żadnych polach! Wpisałem jego nazwę w stylu "ExportAllPNGFiles" a jedyne co widzę to jakieś... "Recorded.Macros.ExportThisShit". Co jest? Czemu nie widnieje moja wpsiana uprzednio NAZWA na liście?):





Tak czy siak... Po włączeniu tego makra i wskazaniu przygotowanego katalogu, dostaję takie coś tylko:




Makro nie działa.

miszcz301 - 8 Czerwiec 2011, 13:13

Nazwa ExportThisShit jest nazwą wpisaną przez autora macra, więc najlepiej w kodzie pokazanym na drugim screenie zamiast niej wpisz swoją nazwę macra.

po zmianie nazwy powinieneś widzieć swoją nazwę w global macros

u mnie działa. sprawdziłem

Bunch - 8 Czerwiec 2011, 15:07

Dzięki - teraz wiem jak zmienić część tej całej nazwy.

No ale.. No na rany Chrystusa, jak działa skoro mi nie działa? Za każdym razem błąd.
Niech mi ktoś pomoże :roll:

chezare - 8 Czerwiec 2011, 18:57

Bunch, napisałem "Skasuj cały wygenerowany tekst i skopiuj w jego miejsce makro Szamana.", a ty nie skasowałeś. Masz dwa nagłówki jednej procedury i dlatego jest błąd.
Wejdź do edytora VBA, znajdź to makro i skasuj od Sub ExportThisShit aż do sub nazwa pod którą zarejestrowałeś makro i będzie działać.
Jak by jednak jakimś cudem nie działało, to skopiuj całą treść i wklej na forum. Bez Szamana też jakoś znajdziemy błąd :-)

Bunch - 18 Czerwiec 2011, 18:58

chezare napisał/a:
Masz dwa nagłówki jednej procedury i dlatego jest błąd.


Jak to? Nie kumam. Nie mam dwóch nagłówków jednej procedury. Skąd to wywnioskowałeś? Nawet na screenie widać sam kod Szamana.
Gdzie ponoć takie coś mam? Przecież usunąłem wszystko i wkleiłem tekst Szamana.


Taki mam kod:

Kod:
Public Sub AllPNGsExport()
     Dim s As Shape
     Dim expflt As ExportFilter
     Dim dirName, report As String
     Dim cnt As Integer
     
     dirName = InputBox("Wprowadź lokalizację plików (katalog):", "Ścieżka do plików", "H:\kosz\pliki\")
     
     cnt = 0
     report = "Wygenerowano pliki:"
     For Each s In ActivePage.Shapes
         If s.Type = cdrBitmapShape Then
             Set expflt = s.Bitmap.SaveAs(dirName & "plik_" & cnt & ".png", cdrPNG, cdrCompressionNone)
             With expflt
                 .Interlaced = True
                 .Transparency = 0 ' FilterPNGLib.pngNone
                 .InvertMask = False
                 .Finish
             End With
             report = report & vbNewLine & "  - " & "plik_" & cnt & ".png"
             cnt = cnt + 1
         End If
     Next s
     report = report & vbNewLine & "i zapisano je w katalogu: " & dirName
     
     MsgBox report, vbInformation, "Zapis zakończony sukcesem:"
 End Sub


Gdzie coś nie tak? Cały kod Szamana tylko jest. Jakie dwa nagłówki? A nie działa!

chezare - 19 Czerwiec 2011, 15:19

Bunch, skoro wyświetla ci się nazwa procedury Szamana, to znaczy że nie wszystko skasowałeś. Trochę to chyba moja wina bo chciałem prosto, a wyszło jak wyszło.
Na razie nie mam jak ale wkrótce napiszę ci jak to zrobić żeby działało.
Pozdro

Bunch - 21 Czerwiec 2011, 10:21

chezare napisał/a:
Bunch, skoro wyświetla ci się nazwa procedury Szamana, to znaczy że nie wszystko skasowałeś.


Wybacz, ale niestety nie rozumiem co masz na myśli :cry:

Dołączam w załączniku dwa screeny jeszcze. Może to Ci pomoże?

No cóż, to dziękuję raz jeszcze za pomoc no i czekam. Bo sam tego nie zrobię. Zastosowałem się do instrukcji, podmieniłem kod w makrach a nie działa. I co tu więcej począć? Jestem tylko ciekaw dlaczego ponoć innym działa, jeden taki użytkownik się tu wpisał...

chezare - 21 Czerwiec 2011, 17:40

Mam na myśli to, że jak wyświetla się tekst z nazwy procedury Szamana, to gdzieś tam musi siedzieć, bo z powietrza komputer go nie bierze. Bunch wejdź do edytora VBA z dokumentu, w którym masz jakieś bitmapy (tak jak na obrazku, który zamieściłeś), znajdź tą swoją procedurę, umieść kursor dajmy na to w nagłówku procedury i kliknij ikonę run.
Ja się za bardzo na tym nie znam, ale jak na mój gust, to masz tę procedurę w dwóch egzemplarzach. To co w screenie nie ma prawa wyświetlić tekstu Szamana.
Procedura działa, bo sam to sprawdzałem, choć jak podasz np. katalog, który nie istnieje, to nic się nie zapisze, a program poinformuje cię o sukcesie. Jak podasz katalog, do którego już zapisywałeś w ten sposób pliki, to diabli je wezmą, bo procedura nadpisze je nowymi. Szaman ostrzegał, że to nie jest cud techniki.

Bunch - 1 Lipiec 2011, 16:30

http://s1.pokazywarka.pl/...106/1769334.jpg
Tu ci pokazałem coś 8-)

maroQ - 1 Lipiec 2011, 18:35

Bunch napisał/a:
jak działa skoro mi nie działa

SOA#512

po sprawdzeniu jeszcze jednej niesprawdzanej opcji o której nie było mowy:
SOA#Z

oto poprawiony kod:
Kod:
Public Sub ExportThisShit()
    Dim s As Shape
    Dim expflt As ExportFilter
    Dim dirName, report As String
    Dim cnt As Integer
   
    dirName = InputBox("Wprowadź lokalizację plików (katalog):", "Ścieżka do plików", "H:\kosz\pliki\")
   
    cnt = 0
    report = "Wygenerowano pliki:"
    For Each s In ActivePage.Shapes
        If s.Type = cdrBitmapShape Then
            On Error GoTo EK
            Set expflt = s.Bitmap.SaveAs(dirName & "plik_" & cnt & ".png", cdrPNG, cdrCompressionNone)
            With expflt
                .Interlaced = True
                .Transparency = 0
                .InvertMask = False
                .Finish
            End With
GoTo SKip
EK:
        ActiveSelectionRange.RemoveFromSelection
        s.Selected = True
        Set expflt = ActiveDocument.ExportBitmap(dirName & "plik_" & cnt & ".png", cdrPNG, cdrSelection, cdrRGBColorImage, , , , , cdrNormalAntiAliasing, , True, True)
        With expflt
            .Interlaced = True
            .Transparency = 0
            .InvertMask = False
            .Finish
        End With
SKip:
            report = report & vbNewLine & "  - " & "plik_" & cnt & ".png"
            cnt = cnt + 1
        End If
    Next s
    report = report & vbNewLine & "i zapisano je w katalogu: " & dirName
   
    MsgBox report, vbInformation, "Zapis zakończony sukcesem:"

End Sub


Kod działał, ale dla nie dla obrazków utworzonych przez Corela. Zamiast się wkurzać, trzeba było trochę pokombinować lub zapłacić to dostał byś sprawny kod z gwarancją i pomocą techniczną :D

chezare - 1 Lipiec 2011, 21:28

Szaman, wszystko jedno czy kod darmowy czy komercyjny ale od profesjonalisty można chyba oczekiwać jakiegoś przyzwoitego poziomu? :-)
Bunch - 11 Lipiec 2011, 20:51

UWAGA!

Szaman dzięki za poprawkę. Bardzo dziękuję bo musiałeś się trochę natrudzić to pisząc.
Wiedz jednak - jako taka ciekawostka - że tym razem jest już o połowę lepiej niż było.
Zaraz Ci wszystko przedstawię.

Sprawdziłem ten skrypt. Sprawa niestety nie wygląda najciekawiej, ponieważ i tak się on źle sprawuje, co więcej - wyciąga mi jakieś oryginalne grafiki sprzed przeróbki i zapisuje do PNG.

No ale po kolei.

Błąd pierwszy:
W polu gdzie wpisujemy adres ścieżki, gdzie chcemy zapisać powstałe grafiki, gdy wpisujemy slash "\" powstaje nam zamiast niego znak "{". Albo jest to jakieś inne dziwadło. Nie można wpisać więc ścieżki ręcznie, trzeba kopiować pełną ścieżkę lub pojedyncze znaki "\" i wstawiać tam gdzie chcemy.

Błąd drugi:
Skrypt działa jak sobie z prostego projektu powyciągam grafiki. Mam nieskomplikowany projekt w którym jest kilka grafik - skrypt działa. Jednak gdy mam projekt w którym grafiki aż się kotłują na ośmiu stronach to skrypt zwraca błąd. A jak wcisnę klawisz 'DEBUG' z komunikatu błędu to odsyła mnie do skryptu i zaznacza tę linijkę:



Mówi Ci to coś, Szamanie?

No mówisz o kupnie, ale nawet sprawdzone i poprawione wersje nie działają w moim przypadku :mrgreen:

chezare - 12 Lipiec 2011, 04:51

O matko, samobójca.
maroQ - 12 Lipiec 2011, 12:24

Bunch napisał/a:
UWAGA!

No mówisz o kupnie, ale nawet sprawdzone i poprawione wersje nie działają w moim przypadku :mrgreen:

Jest taka funkcja w zespole programistów pod nazwą: betatester. Jest to człowiek który... zresztą wikipedia wie lepiej
wiki napisał/a:
Beta tester – to osoba, która przed wydaniem oprogramowania komputerowego testuje jego jakość, wydajność oraz stabilność na wersji beta. Pomaga producentom oprogramowania poprzez składanie raportów z testowania.
(...)
W pozostałych przypadkach, beta testerzy mogą być zatrudniani przez producenta lub wersja beta może zostać udostępniona określonej grupie osób.

Błędy zdarzają się zawsze. Profesjonalne pisanie oprogramowania wymaga poświęcenia dużo czasu, dlatego profesjonalizm kosztuje. Poza tym zawsze trzeba uwzględnić konkretny przypadek. Nie da się z automatu wywalić wszystkie błędy. Zawsze się coś pojawi i w takim przypadku proszę klientów o przesłanie pliku w którym mają błąd. Moje programy zapisują w bazie Corela (w X3 baza jest włączona do pliku cdr) lub pliku tekstowym, informacje o poszczególnych krokach umożliwiając zlokalizowanie problemu.

Co do zamiany "\" na "{" to nie wiem co u ciebie jest nie tak. Może masz ustawiony język klawiatury na "polski 214" zamiast "polski programisty"? Ten kod jest bardzo prosty i w tej części nie ma się co psuć, chyba że podasz nieistniejącą ścieżkę do katalogu to wtedy nic nie zostanie zapisane (brak obsługi błędów związanych wprowadzaniem ścieżki do katalogu) lub wywali się błąd przy zapisie.

Gdzie występuje zapis?
Kod:
Set expflt = s.Bitmap.SaveAs(dirName & "plik_" & cnt & ".png", cdrPNG, cdrCompressionNone)
Kod:
Set expflt = ActiveDocument.ExportBitmap(dirName & "plik_" & cnt & ".png",...


Załącz jakiś plik w którym jest problem i wtedy zobaczę co da się zrobić bo tak to działamy w ciemno.

Bunch - 12 Lipiec 2011, 18:53

Cytat:
O matko, samobójca.

O co chodzi Chezarre?
Odnosisz się do mojego postu, mając na myśli to, że człowiek, który pisze makra komercyjnie, zrobił coś dla kogoś za darmo, a ten ktoś ma jeszcze do niego jakieś pretensje?
To nie są "pretensje", po prostu niezobowiązująco wskazuję to co jest nie tak, informuje że coś takiego nie działa. To doskonalenie swojej sztuki.

Cytat:
Co do zamiany "\" na "{" to nie wiem co u ciebie jest nie tak. Może masz ustawiony język klawiatury na "polski 214" zamiast "polski programisty"?


Uwaga! Za drugim razem, problem z "\" faktycznie nie występuje. nie wiem dlaczego tak się stało wcześniej - przecież nie zawracałbym Ci tym głowy. :-|



Jak widzę program zapisuje też grafiki z małej rozdzielczości. Czy jest możliwe zrobienie tak, aby makro zapisywało grafiki w jak największych rozdzielczościach? Nie mówię abyś coś z tym robił w tym kierunku. Pytam się tylko teoretycznie, z ciekawości. Czy można napisać skrypt tak by generował je w rozdzielczości np 300 DPI?


Ścieżkę do katalogu również podaję poprawnie.

- plik z projektem Wyślę na wiadomość prywatną
, dobrze? Sporo waży i załączyć do forum się nie da.

maroQ - 16 Lipiec 2011, 08:56

Kod:
Sub EksportAllImages()
    Dim p As Page
    Dim s As Shape
    Dim expflt As ExportFilter
    Dim dirName, report As String
    Dim cnt As Integer
   
    dirName = InputBox("Wprowadź lokalizację plików (katalog):", "Ścieżka do plików", "C:\pliki\")
   
    cnt = 0
    report = "Wygenerowano pliki:"
   
    For Each p In ActiveDocument.Pages
    p.Activate
        For Each s In p.Shapes
            If s.Type = cdrBitmapShape Then
                ActiveSelectionRange.RemoveFromSelection
                's.Name = "p" & p.Index & "_" & cnt & ".png"
                s.Selected = True
                Set expflt = ActiveDocument.ExportBitmap(dirName & "p" & p.Index & "_" & cnt & ".png", cdrPNG, cdrSelection, , , , 300, 300, , , True, True)
                With expflt
                    .Interlaced = True
                    .InvertMask = False
                    .Finish
                End With
                report = report & vbNewLine & "  - " & "p" & p.Index & "_" & cnt & ".png"
                cnt = cnt + 1
            End If
        Next s
    Next p
    MsgBox report
End Sub

Dzięki Bunch za podesłanie pliku, zmieniłem podejście do tematu i teraz powinno wszystko działać. Problem w tym, że Corel ma 4 funkcje do eksportu i każda z nich ma inną szybkość działania. Najlepszy był by poprostu zapis zaznaczonej bitmapy, ale to nie zawsze działa. Dlatego w tym makrze wstawiłem trochę wolniejszą, ale pewniejszą funkcję eksportu. Bardzo ważna okazała się prozaiczna linijka p.Activate, bez tego wpisu makro sypało się po przejściu na następną stronę.

Rozdzielczość ustawiona na 300dpi.

Mam nadzieję, że pomogłem.

Bunch - 24 Lipiec 2011, 00:20

Dziękuję za pomoc.
Nadmienię tylko, odnosząc się do tego cytatu, że...
maroQ napisał/a:
Najlepszy był by poprostu zapis zaznaczonej bitmapy, ale to nie zawsze działa.

... że chodziło o zapisanie wszystkich bitmap obecnych w dokumencie. Np. taka gazetka reklamowa gdzie obecne są wycięte już produkty. Aby wszystkie je hurtowo zapisać do pliku, w formacie zachowującym ich przeźroczystość (PNG). A nie tylko jedną, zaznaczoną - no bo wtedy to co to za różnica od zwykłego CTRL + E (eksportuj)? ;-)


Co do...
Cytat:
Bardzo ważna okazała się prozaiczna linijka p.Activate, bez tego wpisu makro sypało się po przejściu na następną stronę.


Właśnie mi wywalało. A ja sprawdzałem to na projektach zawierających kilka stron.


Sprawdzę makro pojutrze (albo jakoś tak) i zrobię sprawozdanie. Dziękuję raz jeszcze.

maroQ - 24 Lipiec 2011, 10:43

Bunch napisał/a:
chodziło o zapisanie wszystkich bitmap obecnych w dokumencie
Natomiast cytat dotyczył funkcji "s.Bitmap.SaveAs" która jest właśnie zwykły zapisem bitmapy a nie eksportem. Funkcja powinna działać zawsze jeśli tylko obiekt jest bitmapą, ale w praktyce różnie to bywa. Eksport jest bezpieczniejszy, ale wolniejszy tyle że przydaje się jeśli obiekt nie jest bitmapą. Do samego eksportu są natomiast 3 funkcje z których każda działa z inną szybkością i zakres ich stosowania jest różny, ale do tego zadania wszystkie się "teoretycznie" nadają.

Bunch napisał/a:
Właśnie mi wywalało
Właśnie to "p.Activate" nie powinno się wywalać, chyba że coś jest nie halo w samym VBA. W X5 można by to podejrzewać bo tam stabilnie od VBA działa VSTA lub VB.NET (nie wiedzieć czemu).
nikiel - 13 Czerwiec 2012, 16:08
Temat postu: DZIEKI
dziala super x5
uwagi
- po wprowadzeniu lini docelowej miejsca zakoncz znakiem \
- jak wybierzesz przez przypadek i pojawi sie okienko miejsca juz nie zatrzymasz(warto wybrac wted )


pozdrawiam


Powered by phpBB modified by Przemo © 2003 phpBB Group