abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 02:00 | Nová verze

Byla vydána nová stabilní verze 0.92.4 a první alfa verze verze 1.0 svobodného multiplatformního vektorového grafického editoru Inkscape. Přehled novinek v poznámkách k vydání (0.92.4 a 1.0alpha0). Obě verze jsou k dispozici také jako balíčky ve formátu AppImage. Stačí je stáhnout, nastavit právo ke spuštění a spustit.

Ladislav Hagara | Komentářů: 0
včera 21:22 | Nová verze

Byla vydána verze 1.32 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.

Ladislav Hagara | Komentářů: 0
včera 15:44 | Komunita

V říjnu byla změněna licence u multiplatformní dokumentové databáze MongoDB z GNU AGPLv3 na SSPL (Server Side Public License). Dle právníku se nejedná o svobodnou licenci. Databáze MongoDB tak nebude obsažena ve Fedoře, v Red Hat Enterprise Linuxu ani například v Debianu.

Ladislav Hagara | Komentářů: 8
včera 02:22 | Nová verze

Byla vydána verze 2.0 svobodné aplikace určené pro fotografování a ovládání digitálních fotoaparátů z počítače Entangle. Kódové jméno této nejnovější verze je Sodium.

Ladislav Hagara | Komentářů: 2
včera 01:22 | Nová verze

Byla vydána verze 2.18 svobodného webového prohlížeče pracujícího v grafickém i textovém módu Links (Wikipedie). Přehled novinek v seznamu změn. Links letos slaví 20 let. První veřejná verze 0.80 byla zveřejněna 24. listopadu 1999.

Ladislav Hagara | Komentářů: 4
16.1. 16:55 | Zajímavý článek

Vývojáři postmarketOS (GitLab) hodnotí 600 dnů vývoje tohoto v květnu 2017 představeného operačního systému pro chytré telefony vycházejícího z optimalizovaného a nakonfigurovaného Alpine Linuxu s vlastními balíčky [reddit].

Ladislav Hagara | Komentářů: 2
16.1. 15:55 | Bezpečnostní upozornění

Společnost Oracle vydala čtvrtletní bezpečnostní aktualizaci svých softwarových produktů (CPU, Critical Patch Update). Opraveno bylo celkově 284 bezpečnostních chyb. V Oracle Java SE je například opraveno 5 bezpečnostních chyb. Všechny jsou vzdáleně zneužitelné bez autentizace. V Oracle MySQL je opraveno 30 bezpečnostních chyb. Vzdáleně zneužitelných bez autentizace jsou 3 z nich.

Ladislav Hagara | Komentářů: 0
16.1. 15:44 | Komunita

Na YouTube byly zveřejněny komunitní videozáznamy přednášek z konference OpenAlt 2018. Letošní OpenAlt proběhne o víkendu 2. a 3. listopadu opět na FIT VUT v Brně.

Ladislav Hagara | Komentářů: 0
16.1. 10:33 | Komunita

Mozilla.cz informuje (en), že program Firefox Test Pilot se příští týden uzavře. Program sloužil téměř tři roky pro testování nových funkcí pro Firefox. Díky němu dnes máme stránku nového panelu, Screenshots pro vytváření snímků stránek, bezpečné sdílení souborů Send, doplněk pro lepší práci a přihlašování k více účtům nebo připravovaný správce hesel Lockbox. Tyto funkce pokračují dál, ale samotný Firefox Test Pilot bude 22. ledna 2019

… více »
Ladislav Hagara | Komentářů: 0
15.1. 21:45 | Zajímavý projekt

Humble Bundle v rámci akce Double Fine Presents nabízí skupinu multiplatformních her bez DRM za vlastní cenu: Mountain, 140 a THOTH (jako jediná nikoliv pro Linux), za nadprůměrnou cenu navíc GNOG a Escape Goat 2 a za aspoň $10 Gang Beasts a Everything. Platbu lze rozdělit mezi vývojáře, Humble Bundle a charitu. Akce probíhá do 29. ledna.

Fluttershy, yay! | Komentářů: 2
Používáte USB Type-C?
 (19%)
 (16%)
 (10%)
 (12%)
 (37%)
 (3%)
 (45%)
Celkem 382 hlasů
 Komentářů: 0
Rozcestník

Pomalá fce Gdk::Pixbuf::create_from_file() na Windows

16.6.2013 11:53 | Přečteno: 1133× | Programování | Výběrový blog | poslední úprava: 16.6.2013 11:56

Narazil jsem na problém s rychlostí fce Gdk::Pixbuf::create_from_file() v Gtkmm 2.22 pod Windows. Pokud se použije pro načtení cca 4MB JPEGu 5600x3700, tak jí to trvá cca 10s.

Na Linuxu to trvá této fci cca 350ms. Pod Wine se tento problém neprojevuje, načtení trvá jen o něco málo déle než na Linuxu. Použil jsem ftp.gnome.org/pub/GNOME/binaries/win32/gtkmm/2.22. Zkoušel jsem i některé starší verze knihovny, ale problém přetrvával.

Něchtělo se mi ztrácet čas zbytečnou kompilací celé knihovny a všech jejich závislostí, tak jsem hledal zda-li se nedají sehnat binárky někde jinde. A našel jsem je např. v OpenSUSE 12.3 ve verzi 2.24.2, tyto binárky fungují bez problémů i ve Windows.

Vývoj dělám v Debian Wheezy a verzi pro Windows kompiluji cross-kompilátorem z projektu MinGW, který je jeho součástí. Binárky pro Windows testuji většinou pod Wine a na čistých Windows až před vydáním další ostré verze.

Uvítal jsem, že je yum součástí Debianu:

# aptitude install yum

Přidáme repozitář s potřebnými balíčky:

# vim /etc/yum/repos.d/opensuse.repo
[windows_mingw_win32]
name=Cross-toolchain for 32-bit windows and 32-bit windows packages (openSUSE_12.3)
type=rpm-md
baseurl=http://download.opensuse.org/repositories/windows:/mingw:/win32/openSUSE_12.3/
gpgcheck=1
gpgkey=http://download.opensuse.org/repositories/windows:/mingw:/win32/openSUSE_12.3/repodata/repomd.xml.key
enabled=1

Zjistíme v jakých balíčcích se nachází knihovna Gtkmm a nainstalujeme je:

# yum search gtkmm2
=== Matched: gtkmm2 ===
mingw32-gtkmm2.noarch : C++ bindings for GTK+2
mingw32-gtkmm2-debug.noarch : Debug information for package mingw32-gtkmm2
mingw32-gtkmm2-devel.noarch : C++ bindings for GTK+2 (devel)

# yum install mingw32-gtkmm2-devel.noarch mingw32-gtkmm2.noarch

Dotážeme se kde se nachází řídící soubory pro pkgconfig, abychom mohli pohodlně předávat potřebné parametry kompilátoru:

# rpm -q -l mingw32-gtkmm2-devel.noarch |grep pkgconfig
/usr/i686-w64-mingw32/sys-root/mingw/lib/pkgconfig/gdkmm-2.4.pc
/usr/i686-w64-mingw32/sys-root/mingw/lib/pkgconfig/gtkmm-2.4.pc

# PKG_CONFIG_PATH=/usr/i686-w64-mingw32/sys-root/mingw/lib/pkgconfig pkg-config --cflags --libs gtkmm-2.4

Vzhledem k tomu, že nechci instalovat závislosti cross-kompilátoru z OpenSUSE, tak jsem použil Windows verzi kompilátoru a spouštím jí pod Wine:

# yum install mingw32-gcc.noarch mingw32-gcc-c++.noarch

Třeba se to bude někomu hodit. Pokud má někdo nějaké tipy a zkušenosti k tématu, budu rád, když se o ně podělíte v diskuzi.

Zjistíme kde má MinGW knihovny:

$ yum whatprovides '*/libstdc++-6.dll'
/usr/i686-w64-mingw32/sys-root/mingw/bin/libstdc++-6.dll

Vypíšeme seznam knihoven, které musíme přibalit k binárce:

$ ./dll_dependencies.py gdk_pixbuf_create_from_file.exe /usr/i686-w64-mingw32/sys-root/mingw/bin 
libgcc_s_sjlj-1.dll
libgdkmm-2.4-1.dll
libcairomm-1.0-1.dll
libcairo-2.dll
libfontconfig-1.dll
libfreetype-6.dll
zlib1.dll
libxml2-2.dll
libpixman-1-0.dll
libpng15-15.dll
libsigc-2.0-0.dll
libstdc++-6.dll
libgdk_pixbuf-2.0-0.dll
libgio-2.0-0.dll
libglib-2.0-0.dll
libintl-8.dll
libgmodule-2.0-0.dll
libgobject-2.0-0.dll
libffi-6.dll
libjasper-1.dll
libjpeg-8.dll
libtiff-5.dll
liblzma-5.dll
libgdk-win32-2.0-0.dll
libpango-1.0-0.dll
libpangocairo-1.0-0.dll
libpangoft2-1.0-0.dll
libharfbuzz-0.dll
libpangowin32-1.0-0.dll
libglibmm-2.4-1.dll
libgtk-win32-2.0-0.dll
libatk-1.0-0.dll
libpangomm-1.4-1.dll
libgtkmm-2.4-1.dll
libatkmm-1.6-1.dll
libgiomm-2.4-1.dll

dll_dependencies.py

#!/usr/bin/python

import os
import sys
from subprocess import Popen, PIPE

DLLS_BLACKLIST = [
    "KERNEL32.dll",
    "msvcrt.dll",
    "USER32.dll",
    "GDI32.dll",
    "WS2_32.dll",
    "MSIMG32.DLL",
    "ADVAPI32.dll",
    "DNSAPI.DLL",
    "ole32.dll",
    "SHELL32.DLL",
    "WINMM.DLL",
    "SHLWAPI.DLL",
    "IMM32.DLL",
    "USP10.dll",
    "COMCTL32.DLL",
    "COMDLG32.DLL",
    "WINSPOOL.DRV",
]

class DllDependencies:
    def __init__(self, program_exe, dlls_path):
        self.dlls_path = dlls_path
        self.result = []
        self.get_dlls(program_exe)

        print "\n".join(self.result)

    def get_dlls(self, program_exe):
        if (not os.path.isfile(program_exe)):
            print "%s not found" % program_exe
            return

        pipe = Popen("objdump -x %s |\
                      grep 'DLL Name' |\
                      sort |\
                      uniq" % program_exe,
                     shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
    
        for line in pipe.stdout.readlines():
            dll = line.strip().split()[2]
            if ((dll not in DLLS_BLACKLIST) and (dll not in self.result)):
                self.result.append(dll)
                dll = "%s/%s" % (self.dlls_path, dll)
                self.get_dlls(dll)

def main():
    if (len(sys.argv) != 3):
        print "Usage: %s PROGRAM_EXE DLLS_PATH" % sys.argv[0]
        sys.exit(-1)

    DllDependencies(sys.argv[1], sys.argv[2])

if __name__ == '__main__':
    main()

Makefile:

GPP = g++ -O2 -Wall
#W_GPP = i686-w64-mingw32-g++ -O2 -Wall
W_GPP = /usr/i686-w64-mingw32/sys-root/mingw/bin/g++.exe -O2 -Wall

GTKMM = `pkg-config --cflags --libs gtkmm-2.4`

PKG_CONFIG_PATH = /usr/i686-w64-mingw32/sys-root/mingw/lib/pkgconfig
W_GTKMM_CFLAGS = `PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --cflags gtkmm-2.4`
W_GTKMM_LIBS = `PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --libs gtkmm-2.4`

all: gdk_pixbuf_create_from_file gdk_pixbuf_create_from_file.exe

gdk_pixbuf_create_from_file: gdk_pixbuf_create_from_file.cpp
	$(GPP) $(GTKMM) -o gdk_pixbuf_create_from_file gdk_pixbuf_create_from_file.cpp

gdk_pixbuf_create_from_file.exe: gdk_pixbuf_create_from_file.cpp
	$(W_GPP) $(W_GTKMM_CFLAGS) -o gdk_pixbuf_create_from_file.exe gdk_pixbuf_create_from_file.cpp $(W_GTKMM_LIBS)

gdk_pixbuf_create_from_file.cpp:

#include <gtkmm.h>
#include <glib.h>
#include <iostream>

#ifdef WIN32
// Windows
#include <windows.h>
// UINT64
//#include <basetsd.h>
#else
// Linux
#include <sys/time.h>
#include <ctime>
// uint64_t
//#include <stdint.h>
#endif

void print_timestamp(const char *p_msg)
{
    static guint64 milliseconds_begin = 0;
    guint64 milliseconds;

    // http://stackoverflow.com/questions/1861294/how-to-calculate-execution-time-of-a-code-snippet-in-c
#ifdef WIN32
    // Windows
    FILETIME ft;
    LARGE_INTEGER li;
    
    // Get the amount of 100 nano seconds intervals elapsed since January 1, 1601 (UTC) and copy it
    // to a LARGE_INTEGER structure.
    GetSystemTimeAsFileTime(&ft);
    li.LowPart = ft.dwLowDateTime;
    li.HighPart = ft.dwHighDateTime;
    
    milliseconds = li.QuadPart;
    milliseconds -= 116444736000000000LL; // Convert from file time to UNIX epoch time.
    milliseconds /= 10000; // From 100 nano seconds (10^-7) to 1 millisecond (10^-3) intervals
#else
    // Linux
    struct timeval tv;
    
    gettimeofday(&tv, NULL);
    
    milliseconds = tv.tv_usec;

    // Convert from micro seconds (10^-6) to milliseconds (10^-3)
    milliseconds /= 1000;
    
    // Adds the seconds (10^0) after converting them to milliseconds (10^-3)
    milliseconds += (tv.tv_sec * 1000);
#endif

    if (milliseconds_begin == 0) {
        milliseconds_begin = milliseconds;
    }

    std::cout << "timestamp - " << p_msg << ": " << (milliseconds - milliseconds_begin) << "ms" << std::endl;
    milliseconds_begin = milliseconds;
}

int main(int argc, char *argv[])
{
    Glib::RefPtr<Gdk::Pixbuf> image;

    Gtk::Main kit(argc, argv);

    print_timestamp("BEGIN");
    image = Gdk::Pixbuf::create_from_file("image.jpeg");
    print_timestamp("END");
}
       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Vložit další komentář

David Watzke avatar 16.6.2013 12:00 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Pomalá fce Gdk::Pixbuf::create_from_file() na Windows
OT: btw, v C++11 už bude možné vypustit ten ifdef WIN32 díky std::chrono.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
16.6.2013 12:12 Jardík
Rozbalit Rozbalit vše Re: Pomalá fce Gdk::Pixbuf::create_from_file() na Windows
Super, ale na co proboha ta 32bit šmejďárna? Vždyť jsou tam i 64bit balíčky.
16.6.2013 15:13 luv | skóre: 18 | blog: luv
Rozbalit Rozbalit vše Re: Pomalá fce Gdk::Pixbuf::create_from_file() na Windows
Silenost :-)
16.6.2013 19:24 JZD | skóre: 10 | blog: Na_dvorku
Rozbalit Rozbalit vše Re: Pomalá fce Gdk::Pixbuf::create_from_file() na Windows
To chce tučňáka.
Víra znamená vyznávat to, o čem člověk dobře ví, že to není pravda. Mlčeti platina, mluviti v gajzu, býti v hajzlu.
GeoRW avatar 20.6.2013 18:32 GeoRW | skóre: 13 | blog: GeoRW | Bratislava
Rozbalit Rozbalit vše Re: Pomalá fce Gdk::Pixbuf::create_from_file() na Windows
tak toto by som kvoli Windows vobec neriesil :-)
"This is to be taken with a grain of salt." ACBF - Advanced Comic Book Format
1.3.2017 08:12 samvila
Rozbalit Rozbalit vše Re: Pomalá fce Gdk::Pixbuf::create_from_file() na Windows
I really loved reading your blog. I also found your posts very interesting. In fact after reading, I had to go show it to my friend and he ejoyed it as well! happy wheels happy wheels demo five nights at freddy's geometry dash
1.3.2017 10:28 nazumi
Rozbalit Rozbalit vše Re: Pomalá fce Gdk::Pixbuf::create_from_file() na Windows
Thank you for another essential article. I have learned a lot from your article. Thank so much, again! hotmail login flip diving amazon underground apk
21.4.2017 05:41 word cookies answers
Rozbalit Rozbalit vše Re: Pomalá fce Gdk::Pixbuf::create_from_file() na Windows

I would like to say that this blog really convinced me to do it! Thanks, very good post. word cookies game | hotmail email login | hotmail account login

16.7.2017 16:56 Dan
Rozbalit Rozbalit vše Re: Pomalá fce Gdk::Pixbuf::create_from_file() na Windows
class, kterým určíte jazyk pa portfolio logo design í být ve tvar.
5.8.2017 10:16 Thanks
Rozbalit Rozbalit vše Re: Pomalá fce Gdk::Pixbuf::create_from_file() na Windows
hotmail login and hotmail outlook login are now running normally. “A few Microsoft services experienced an outage that affected customers' access to these services. skype infor
16.11.2017 12:40 happy new year
Rozbalit Rozbalit vše Re: Pomalá fce Gdk::Pixbuf::create_from_file() na Windows
The New Year is the time of Happy New Year Wishes unfolding horizons and the realization of dreams, may you rediscover new strength and garner faith with you, and be able to rejoice in the simple pleasures that life has to offer and put a brave front for all the challenges that may come your way. Wishing you a lovely Happy New Year 2018 Images
10.3.2018 18:28 Lee Mark
Rozbalit Rozbalit vše Re: Pomalá fce Gdk::Pixbuf::create_from_file() na Windows
Thanks bro for sharing the wonderful article... Smadav 2019 | Smadav 2019 | Avast 2019
11.5.2018 10:00 pk
Rozbalit Rozbalit vše Re: Pomalá fce Gdk::Pixbuf::create_from_file() na Windows
i like the greta post thaks
24.7.2018 08:47 smadav
Rozbalit Rozbalit vše Re: Pomalá fce Gdk::Pixbuf::create_from_file() na Windows
25.7.2018 05:06 Hotmail Login
Rozbalit Rozbalit vše Re: Pomalá fce Gdk::Pixbuf::create_from_file() na Windows
Thank you for posting such a great article! I found your website perfect for my needs. It contains wonderful and helpful posts. Keep up the good work!. Thank you for this wonderful Article! http://hotmailblogs.com/
25.7.2018 05:07 Hotmail Login
Rozbalit Rozbalit vše Re: Pomalá fce Gdk::Pixbuf::create_from_file() na Windows
Thank you for posting such a great article! I found your website perfect for my needs. It contains wonderful and helpful posts. Keep up the good work!. Thank you for this wonderful Article! Hotmail Login
25.7.2018 05:08 Hotmail.com Login
Rozbalit Rozbalit vše Re: Pomalá fce Gdk::Pixbuf::create_from_file() na Windows
Posts are very meaningful thanks to the site Hotmail.com Login
25.7.2018 05:09 Hotmail Login Tip
Rozbalit Rozbalit vše Re: Pomalá fce Gdk::Pixbuf::create_from_file() na Windows
Excellent post. This article is very helpful for the people and also for me. I get the some useful knowledge in this post. Thanks for sharing the informative topic, by the way Hotmail Login Tip
1.12.2018 09:58 pikachu chu
Rozbalit Rozbalit vše susu
Thank for your writting! I have read through some similar topics! However, your post has given me a very special impression, unlike other posts. I hope you continue to have valuable articles like this or more to share with everyone! the impossible quiz
8.1. 06:48 karishma36
Rozbalit Rozbalit vše Re: Pomalá fce Gdk::Pixbuf::create_from_file() na Windows
I am having such a good time here on this article and i was taking a look on this information and then i have got many things from this article.You did such a great job and i wish for more. Delhi Escorts

Založit nové vláknoNahoru

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.