From: Andreas Eversberg Date: Sat, 23 May 2015 13:39:40 +0000 (+0200) Subject: Introduce img_preview_buffer X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=colorize.git;a=commitdiff_plain;h=57b08a51c1f0e16a7b29d0ddaf77638a134a1343 Introduce img_preview_buffer This buffer is an overlay image, the img_grey_buffer is not touched. The 'rendered' button will load the rendered image, if exists. The 'preview' button just allocates a copy of the grey image. Later it will be used to render to this buffer on the fly. --- diff --git a/gui/buttons/b_col.c b/gui/buttons/b_col.c index 14c236e..a64bf32 100644 --- a/gui/buttons/b_col.c +++ b/gui/buttons/b_col.c @@ -26,73 +26,80 @@ const guint8 img_col[] = "\246\213\204\246\213\204\244\213\204\244\213\200\244\213\200\243\211" "}\240\207|\237\206{\237\206{\236\204x\230~r\222yn\201so\"\0/QB\40x\216\32u\214" - "\26q\210\27v\215\33y\215\40z\212t\"h\322\0\\\304\0\\\272\0\217\240\0" - "\230\210\0\224\204\0\240\217\0\256\227\0\302\244\0\233\2115$s\212\23" - "o\211\24RZyE\27\256V\40\277_+\306`.\256A\6l3\0z9\0v8\0\214B\0^.\0^,\0" - "P&\0@\36\0<\40\0H)\0!ju\33r\205\25s\207\31w\213\33y\215\36\177\210\40" - "\"T\262\0S\260\0n\234\0\244\232\0\224\204\0\224\204\0\224\204\0\226\206" - "\0\236\215\0\236\215\0\224\226\0\17dsYN+\216L\34fI&\242R\"\305c-\317" - "`)\276Q\26\234B\0\242L\0\210C\0\216\77\0x8\0^,\0^.\0X+\0D#\0>B(\25m\177" - "\23q\211\32z\210\35}\213\40~\206*\"R\256\0X\242\0\217\230\0\242\221\0" - "\224\204\0\226\206\0\230\210\0\234\213\0\232\212\0\220\201\0\200r\0|" - "i\0\270P\"\264B\12\2037\15\236O$\276f6\306b,\316_(\314b\"\256N\0\271" - "O\17\267O\11\222>\0`/\0b0\0R)\0V-\0Z5\0'`a\26q\204\25p\207\31y\207\32" - "\201\210inN\246\0d\236\0\244\236\0\236\215\0\234\213\0\240\217\0\250" - "\226\0\244\223\0\224\204\0xh\0n]\0\316J\20\315\77#\3118\27\3115\7\273" - "T+\273`/\274S\24\271X\27\316d$\320e*\312](\264D\0n1\0P&\0H\"\0F#\0Z*" - "\0T1\0-OC\27fy\23n\205\27r\211\30s\212\40\"=\210\0T\216\0\222\220\0\240" - "\217\0\246\224\0\240\217\0\230\210\0\210z\0xk\0rf\0\246f\0\3146\36\321" - "@#\304>\32\3238\17\325\77\27\314B\22\267B\11vL\"\251W\25\312`\40\300" - "Q\32\2549\0d-\0R'\0>\35\0""4\27\0>\35\0<\36\0+I>\25ey\26n\204\26q\210" - "\32z\210efY~\0y\204\0\244\226\0\270\245\0\264\241\0\244\223\0\226\206" - "\0\214}\0~q\0ra\0\274P\0\303@\35\274A(\264B(\3025\24\3251\21\3359\23" - "\3104\6\230>\26\231\77\11\300S\22\274K\24\264C\14^*\0N%\0""6\30\0,\21" - "\0""8\32\0""4\30\0$RN\22k~\23l\205\26t\210\33{\211\"\12\210\200\0\244" - "\223\0\266\243\0\260\235\0\266\243\0\266\243\0\256\234\0\226\206\0\200" - "r\0p_\0\274Q\2\274&\10\200\6\0\267\37\23\275E1\3274\31\3452\25\337>\23" - "\325D\21\315I\17\312S\30\300Q\32\265D\15""6\31\0J#\0""6\30\0<\31\0H$" - "\0H)\0\26^n\16i\200\22p\204\26t\210\34|\212ef\230\210\0\240\217\0\264" - "\241\0\254\232\0\254\232\0\266\243\0\256\234\0\242\221\0\230\210\0\200" - "o\0\250S\0\274)\2\234\4\0\222\7\0\2671\37\3263\36\345\77\31\342I\32\332" - "M\26\326Q\26\320M\32\306Q\30\260>\0""0\25\0""6\27\0.\22\0R)\0^1\0*>." - "\15e{\15h\177\21l\203\30s\206\31|\207\0\0\260\235\0\250\226\0\264\245" - "\0\260\235\0\256\234\0\254\232\0\252\230\0\236\215\0\230\210\0\252\230" - "\0\256\217\0\305W\25\306'\10\252\20\0\266\35\4\3263\30\343G\35\341P\27" - "\330S\30\323K\25\305N\23\267D\13l0\0D\40\0:\31\0""2\25\0N'\0W<\11\31" - "Y]\10f~\16i\200\21l\203\30x\206\33v\211\0\0\254\232\0\260\235\0\264\241" - "\0\260\235\0\242\221\0\254\232\0\240\223\0\206\201\0\204|\0\254\232\0" - "\260\235\0\302\216\0\312b\34\311X'\315L\37\324F\32\325M\27\323O\25\312" - "L\24\274G\16\257>\7\212:\0d/\0f0\0h,\0V&\0\204;\0\220G\6""5K8\15bu\16" - "i\200\22p\204\26t\210\33{\211\0\0\266\243\0\256\234\0\262\237\0\254\232" - "\0\252\230\0\222\211\0p\204\0V\214\10k\202\0\242\225\0\264\241\0\262" - "\233\0\272\210\0\301T\13\277L\31\301K\27\277O\27\276M\26\265D\15\253" - "=\7\260\77\2\236;\0\254=\0|2\0n,\0\200<\0\237L\3\251M\11\235T\23:TI\15" - "e{\24o\202\30x\206\32z\210\0\0\266\243\0\270\245\0\262\237\0\254\232" - "\0\242\221\0\204\202\0V\200\16\302\266\0\236\244\4\210\220\0\260\235" - "\0\264\241\0\250\222\0\234r\0\252;\4\255:\15\255>\15\252<\6\240K\0xA" - "\0z+\0x*\0X\35\0""4\27\0N(\0\202:\0\244Y\10\243\202\17\245\202\11\225" - "r\37+eM\21p{\33v\201\31y\207\0\0\264\241\0\266\243\0\264\241\0\256\234" - "\0\230\210\0\244\223\0z\230\0\267\271\7\263\265\3G|\16\222\211\0\264" - "\241\0\254\232\0\220}\0zd\0lJ\0tL\0~h\0\202q\0vd\0@'\0=-\13\16HL\23I" - "M/;\37dR\0Y\222\0M\224\0N\226\0N\226\0A\222\0\24\202#\31}r\32|\210\0" - "\0\270\245\0\266\243\0\266\243\0\264\241\0\232\212\0\236\215\0\230\217" - "\0g\231\5x\240\0\222\215\0\262\243\0\264\241\0\264\241\0\226\206\0~q" - "\0~q\0\210z\0~q\0~q\0ja\0M`\0\20`X\6`p\7aq\17cL\34w\212\0\0\272\246\0\270\245\0\266\243" - "\0\264\241\0\240\217\0\230\210\0\250\226\0\204\202\0\224\210\0\264\241" - "\0\262\237\0\264\241\0\266\243\0\254\232\0\236\215\0\220\201\0\210z\0" - "\210z\0\202t\0~\200\0c\214\0@\226\0\36\227\1(\234\4S\272\0U\264\0M\244" - "\0T\262\0T\262\0S\260\0T\262\0S\250\0\24\202+\32z\210\0\0"}; + "waw\232$J\204\245\0\0\245\0\0\245\0\0\245\0\0\245\0\0\245\0\0\245\0\0" + "\245\0\0\245\0\0\245\0\0\245\0\0\245\0\0\"E|MVgFB\30\36_f\36v\214\35" + "x\217\40{\222$|\222%}\223(}\2200{\204xb\244\206\202\243\205\201\243\205" + "}\245\214u\262\225\\\247\211o\241\204u\243\205o\235\204q$J\203\204\246" + "\316\357()\357()\357()\357()\357()\357()\357()\357()\357()\357()\357" + "()\357()\214\252\326\"F|:\35\0BM3$p\200\"z\220\35x\217\33v\215\35{\223" + "#{\221.\200\214de\224\253U\222\255S\204\2719\251\321\13\276\252\0\310" + "\256\0\325\257\27\246\213`\227yq!I\204\214\252\326\316\0\0\316\0\0\316" + "\0\0\316\0\0\316\0\0\316\0\0\316\0\0\316\0\0\316\0\0\316\0\0\316\0\0" + "\316\0\0\224\256\326!I\2042\26\0>\"\0/QB\40x\216\32u\214\26q\210\27v" + "\215\33y\215\40z\212\40\0h\322\0\\\304\0\\\272\0\217\240\0\230\210\0" + "\224\204\0\240\217\0\256\227\0\302\244\0!I\204\214\252\326\377\377\377" + "\377\377\377\347\353\347\347\353\347\347\353\347\347\353\347\347\353" + "\347\347\353\347\347\353\347\347\353\347\367\367\367\377\377\377\224" + "\256\326!I\204@\36\0<\40\0H)\0!ju\33r\205\25s\207\31w\213\33y\215\36" + "\177\210\40""1T\262\0S\260\0n\234\0\244\232\0\224\204\0\224\204\0\224" + "\204\0\226\206\0\236\215\0!I\204\214\246\326\377\377\377\377\373\377" + "\347\347\347\347\347\347\347\347\347\347\347\347\347\347\347\347\347" + "\347\347\347\347\347\347\347\367\367\367\377\377\377\214\256\326!I\204" + "^.\0X+\0D#\0>B(\25m\177\23q\211\32z\210\35}\213\40~\206itR\256\0X\242" + "\0\217\230\0\242\221\0\224\204\0\226\206\0\230\210\0\234\213\0\232\212" + "\0!I\204\204\246\316\377\377\377\377\377\377\367\363\357\367\363\357" + "\367\363\357\367\363\357\367\363\357\367\363\357\367\363\357\367\363" + "\357\377\373\377\377\377\377\214\252\326!I\204b0\0R)\0V-\0Z5\0'`a\26" + "q\204\25p\207\31y\207\32\201\210apN\246\0d\236\0\244\236\0\236\215\0" + "\234\213\0\240\217\0\250\226\0\244\223\0\224\204\0!I\204\204\242\316" + "\377\377\377\377\373\377\336\337\336\336\337\336\336\337\336\336\337" + "\336\336\337\336\336\337\336\336\337\336\336\337\336\367\363\367\377" + "\377\377\214\252\326!I\204H\"\0F#\0Z*\0T1\0-OC\27fy\23n\205\27r\211\30" + "s\212\40\0=\210\0T\216\0\222\220\0\240\217\0\246\224\0\240\217\0\230" + "\210\0\210z\0xk\0!I\204{\242\316\265\307\347\367\367\377\367\373\377" + "\367\373\377\367\373\377\367\373\377\367\373\377\367\373\377\367\373" + "\377\367\373\377\367\367\377\265\313\347\204\246\316!I\204>\35\0""4\27" + "\0>\35\0<\36\0+I>\25ey\26n\204\26q\210\32z\210neY~\0y\204\0\244\226\0" + "\270\245\0\264\241\0\244\223\0\226\206\0\214}\0~q\0!I\204{\236\316Z\206" + "\275Jm\224R]ZRURRURRURRURRURRURZ]ZBe\214Jy\265\204\242\316!I\2046\30" + "\0,\21\0""8\32\0""4\30\0$RN\22k~\23l\205\26t\210\33{\211xb\210\200\0" + "\244\223\0\266\243\0\260\235\0\266\243\0\266\243\0\256\234\0\226\206" + "\0\200r\0!I\204s\232\306Z\206\275R]Z\265\262\255\316\317\316\316\313" + "\316\326\323\326\336\337\336\357\353\357\377\373\377\316\317\316Z]cB" + "q\255{\236\316!I\2046\30\0<\31\0H$\0H)\0\26^n\16i\200\22p\204\26t\210" + "\34|\212\0\0\230\210\0\240\217\0\264\241\0\254\232\0\254\232\0\266\243" + "\0\256\234\0\242\221\0\230\210\0!I\204k\226\306R\202\275RUR\316\317\316" + "kqsRURcec\357\353\357\377\373\377\367\363\367\347\343\347RURBq\255s\232" + "\306!I\204.\22\0R)\0^1\0*>.\15e{\15h\177\21l\203\30s\206\31|\207\0\0" + "\260\235\0\250\226\0\264\245\0\260\235\0\256\234\0\254\232\0\252\230" + "\0\236\215\0\230\210\0!I\204k\222\306R}\275RUR\326\323\326ZacZ}\255R" + "UR\367\367\367\367\363\367\336\333\336\316\317\316RURBu\265k\226\306" + "!I\2042\25\0N'\0W<\11\31Y]\10f~\16i\200\21l\203\30x\206\33v\211\0\0\254" + "\232\0\260\235\0\264\241\0\260\235\0\242\221\0\254\232\0\240\223\0\206" + "\201\0\204|\0!I\204c\212\275J}\265RUR\336\333\336cacZ}\255RUR\357\357" + "\357\336\333\336\306\303\306\306\303\306RURJu\265k\216\306!I\204V&\0" + "\204;\0\220G\6""5K8\15bu\16i\200\22p\204\26t\210\33{\211\0\0\266\243" + "\0\256\234\0\262\237\0\254\232\0\252\230\0\222\211\0p\204\0V\214\10k" + "\202\0!I\204R\202\265R}\265RUR\357\353\357susRURcec\336\337\336\306\303" + "\306\255\256\255\275\276\275RURJu\265c\212\275!I\204\200<\0\237L\3\251" + "M\11\235T\23:TI\15e{\24o\202\30x\206\32z\210\0\0\266\243\0\270\245\0" + "\262\237\0\254\232\0\242\221\0\204\202\0V\200\16\302\266\0\236\244\4" + "w\213\2161Y\224R}\265RUR\367\363\367\377\377\377\367\367\367\357\353" + "\357\326\327\326\306\307\306\306\307\306\306\303\306RURZ\206\275R}\265" + "3\34w\212\0\0\272\246" + "\0\270\245\0\266\243\0\264\241\0\240\217\0\230\210\0\250\226\0\204\202" + "\0\224\210\0\264\241\0\262\237\0\264\241\0\266\243\0\254\232\0\236\215" + "\0\220\201\0\210z\0\210z\0\202t\0~\200\0c\214\0@\226\0\36\227\1(\234" + "\4S\272\0U\264\0M\244\0T\262\0T\262\0S\260\0T\262\0S\250\0\24\202+\32" + "z\210\0\0"}; diff --git a/gui/buttons/b_preview.c b/gui/buttons/b_preview.c index 4f9ca74..dd05f12 100644 --- a/gui/buttons/b_preview.c +++ b/gui/buttons/b_preview.c @@ -23,65 +23,76 @@ const guint8 img_preview[] = /* height (19) */ "\0\0\0\23" /* pixel_data: */ - "\326_[\326_[\326_[\326_[\326_[\326^Y\325ZV\325YT\325YT\323TP\321LH\320" - "FA\315;6\2702-\233*&}\"\36x\40\35\210%!u\37\34h\34\31S\26\24I\24\22K" - "\24\22u\37\34\245-(\2702-\255/*\252.)\2702-\2702-\2620+\256/+\250-)\235" - "*&\0\0\326^Y\326^Y\326_[\326^Y\325YT\325YT\325ZV\324VQ\323SN\321LH\320" - "HC\315=8\30350\240+'m\35\32\216&#\2764/\2722-\256/+\206$!I\24\22F\23" - "\21K\24\22E\22\21S\26\24\201#\40\233*&\2702-\2702-\2764/\3004/\3004/" - "\3004/\3004/\40""1\325ZV\325YT\325YT\326_[\331id\326^Y\323TP\324VQ\323" - "SN\320FA\315;6\30661\2620+}\"\36s\37\34\2722-\31271\2764/\253.*m\35\32" - "I\24\22F\23\21K\24\22F\23\21I\24\22V\27\25\220'#\2620+\2764/\2702-\266" - "1-\2764/\2764/\306610\12\334ws\335xt\335{x\345\233\230\335xt\336\200" - "}\340\210\205\326^Y\320HC\315=8\3024/\2702-\245-(\201#\40\2600+\3137" - "2\31483\226)%\203#\40i\34\32S\26\24e\33\30[\30\26P\25\23Q\26\24K\24\22" - "[\30\26\220'#\2722-\2651,\256/+\2651,\2702-\2753.t\"\340\210\205\334" - "ws\332mi\327a\\\321KF\320FA\323SN\327a\\\333sp\323SN\2661-\253.*\210" - "%!\226)%\2702-\31061\31372\240+'{!\36\206$!\203#\40\226)%q\37\34n\36" - "\33f\34\31Y\30\26Y\30\26h\34\31\252.)\2620+\2600+\2661-\2702-\3004/\40" - "\"\327a\\\326_[\323SN\327a\\\320FA\320FA\320FA\321ID\323QL\323QL\325" - "YT\235*&\226)%\245-(\226)%\2600+\31483\31483\2661-\232*%\245-(\226)%" - "\222'#\206$!n\36\33q\37\34m\35\32^\31\27\201#\40\252.)\256/+\2722-\276" - "4/\3004/*\"\326^Y\323SN\325YT\324VQ\320FA\321ID\321KF\323QL\321LH\317" - "A<\3024/\2702-\2651,\243,(\210%!\253.*\31483\31483\31483\31483\253.*" - "\2620+\2600+\222'#s\37\34u\37\34i\34\32m\35\32y!\36\240+'\256/+\255/" - "*\2702-\3004/in\323SN\323QL\327d`\323QL\323QL\323SN\326_[\325ZV\320F" - "A\2661-\250-)\2631,\252.)\240+'\232*%\2722-\31061\2702-\2753.\315;6\315" - "=8\31061\245-({!\36f\34\31`\32\27`\32\27m\35\32q\37\34\215&\"\245-(\252" - ".)\2600+\2620+\40\"\30350\315=8\323QL\323SN\325ZV\323SN\321KF\31483\270" - "2-\2620+\3004/\240+'\253.*\245-(\243,(\252.)\252.)\245-(\233*&\2661-" - "\31372\2702-\226)%q\37\34h\34\31X\30\25P\25\23X\30\25X\30\25\206$!\242" - ",'\253.*\256/+\2722-ef\3024/\315=8\326^Y\333rn\332mi\325ZV\321ID\315" - "=8\3004/\255/*\2620+\245-(\245-(\245-(\232*%\233*&\245-(\232*%\226)%" - "\226)%\2702-\256/+\245-(m\35\32e\33\30Q\26\24E\22\21S\26\24P\25\23\216" - "&#\245-(\252.)\2620+\2753.\"\12\315=8\325ZV\332mi\330gc\332mi\332mi\330" - "ea\321ID\3024/\252.)\2631,\210%!S\26\24\200#\37\253.*\242,'\243,(\253" - ".*\256/+\2620+\2753.\2702-\245-(Q\26\24`\32\27Q\26\24S\26\24`\32\27h" - "\34\31\232*%\245-(\253.*\2620+\2764/ef\321KF\323SN\332mi\327d`\327d`" - "\332mi\330ea\324VQ\321KF\3004/\256/+\210%!Y\30\26Y\30\26\225($\240+'" - "\2600+\2702-\2722-\2764/\2702-\2702-\233*&I\24\22P\25\23F\23\21i\34\32" - "u\37\34y!\36\240+'\243,(\250-)\2620+\2753.\0\0\330gc\326_[\333pl\330" - "gc\330ea\327d`\327a\\\323QL\321KF\327a\\\325YT\2764/\215&\"m\35\32{!" - "\36\240+'\2702-\3004/\3004/\2661-\2651,\245-(y!\36[\30\26Q\26\24K\24" - "\22f\34\31\200#\37\225($\240+'\245-(\250-)\2702-\2661-\0\0\327d`\330" - "gc\332mi\330gc\324VQ\327d`\325YT\316>9\31483\327d`\330gc\326_[\31483" - "\3004/\2661-\2620+\2702-\2722-\2651,\252.)\233*&\215&\"u\37\34x\40\35" - "s\37\34h\34\31\213&\"\233*&\210%!\232*%\245-(\253.*\2620+\2753.\0\0\332" - "mi\330ea\331jf\327d`\327a\\\321KF\315;6\315=8\31483\325ZV\332mi\330e" - "a\323TP\2702-\2620+\2600+\2651,\2620+\245-(\232*%\235*&\225($\232*%\200" - "#\37u\37\34\213&\"\245-(\252.)\256/+\226)%\240+'\253.*\2702-\2722-\0" - "\0\332mi\333rn\331jf\327d`\324VQ\316>9\30661\340\206\203\331id\322PK" - "\330gc\332mi\325ZV\31483\226)%\226)%\233*&\226)%\245-(\216&#y!\36x\40" - "\35^\31\27P\25\23h\34\31\210%!\2651,\321KF\321KF\31483\245-(\253.*\265" - "1,\2702-\0\0\332mi\332mi\332mi\330ea\321KF\325ZV\323SN\340\210\205\337" - "\202~\2764/\321KF\332mi\327d`\315=8\2620+\225($\226)%\2702-\3004/\262" - "0+`\32\27h\34\31{!\36\200#\37s\37\34\232*%\317A<\316@;\317C>\317C>\315" - ";6\2661-\2722-\2753.\0\0\333rn\332mi\332mi\332mi\321LH\323QL\323SN\322" - "PK\325ZV\322PK\332mi\332mi\332mi\321ID\3004/\3004/\31483\3004/\3004/" - "\252.)\242,'\226)%\226)%\226)%\226)%\2661-\320FA\323QL\325YT\325YT\323" - "SN\323SN\2764/\2702-\0\0\333sp\333rn\332mi\332mi\323SN\321KF\326_[\316" - ">9\321KF\332mi\331jf\332mi\332mi\327d`\323QL\317A<\31483\31483\30661" - "\315;6\316>9\316>9\31372\315=8\331id\327d`\323QL\327a\\\327a\\\326_[" - "\327a\\\324VQ\2661-\2722-\0\0"}; + "\246\213\204\246\213\204\244\213\204\244\213\200\244\213\200\243\211" + "}\240\207|\237\206{\237\206{\236\204x\230~r\222yn\201so\"\0/QB\40x\216\32u\214" + "\26q\210\27v\215\33y\215\40z\212t\"h\322\0\\\304\0\\\272\0\217\240\0" + "\230\210\0\224\204\0\240\217\0\256\227\0\302\244\0\233\2115$s\212\23" + "o\211\24RZyE\27\256V\40\277_+\306`.\256A\6l3\0z9\0v8\0\214B\0^.\0^,\0" + "P&\0@\36\0<\40\0H)\0!ju\33r\205\25s\207\31w\213\33y\215\36\177\210\40" + "\"T\262\0S\260\0n\234\0\244\232\0\224\204\0\224\204\0\224\204\0\226\206" + "\0\236\215\0\236\215\0\224\226\0\17dsYN+\216L\34fI&\242R\"\305c-\317" + "`)\276Q\26\234B\0\242L\0\210C\0\216\77\0x8\0^,\0^.\0X+\0D#\0>B(\25m\177" + "\23q\211\32z\210\35}\213\40~\206*\"R\256\0X\242\0\217\230\0\242\221\0" + "\224\204\0\226\206\0\230\210\0\234\213\0\232\212\0\220\201\0\200r\0|" + "i\0\270P\"\264B\12\2037\15\236O$\276f6\306b,\316_(\314b\"\256N\0\271" + "O\17\267O\11\222>\0`/\0b0\0R)\0V-\0Z5\0'`a\26q\204\25p\207\31y\207\32" + "\201\210inN\246\0d\236\0\244\236\0\236\215\0\234\213\0\240\217\0\250" + "\226\0\244\223\0\224\204\0xh\0n]\0\316J\20\315\77#\3118\27\3115\7\273" + "T+\273`/\274S\24\271X\27\316d$\320e*\312](\264D\0n1\0P&\0H\"\0F#\0Z*" + "\0T1\0-OC\27fy\23n\205\27r\211\30s\212\40\"=\210\0T\216\0\222\220\0\240" + "\217\0\246\224\0\240\217\0\230\210\0\210z\0xk\0rf\0\246f\0\3146\36\321" + "@#\304>\32\3238\17\325\77\27\314B\22\267B\11vL\"\251W\25\312`\40\300" + "Q\32\2549\0d-\0R'\0>\35\0""4\27\0>\35\0<\36\0+I>\25ey\26n\204\26q\210" + "\32z\210efY~\0y\204\0\244\226\0\270\245\0\264\241\0\244\223\0\226\206" + "\0\214}\0~q\0ra\0\274P\0\303@\35\274A(\264B(\3025\24\3251\21\3359\23" + "\3104\6\230>\26\231\77\11\300S\22\274K\24\264C\14^*\0N%\0""6\30\0,\21" + "\0""8\32\0""4\30\0$RN\22k~\23l\205\26t\210\33{\211\"\12\210\200\0\244" + "\223\0\266\243\0\260\235\0\266\243\0\266\243\0\256\234\0\226\206\0\200" + "r\0p_\0\274Q\2\274&\10\200\6\0\267\37\23\275E1\3274\31\3452\25\337>\23" + "\325D\21\315I\17\312S\30\300Q\32\265D\15""6\31\0J#\0""6\30\0<\31\0H$" + "\0H)\0\26^n\16i\200\22p\204\26t\210\34|\212ef\230\210\0\240\217\0\264" + "\241\0\254\232\0\254\232\0\266\243\0\256\234\0\242\221\0\230\210\0\200" + "o\0\250S\0\274)\2\234\4\0\222\7\0\2671\37\3263\36\345\77\31\342I\32\332" + "M\26\326Q\26\320M\32\306Q\30\260>\0""0\25\0""6\27\0.\22\0R)\0^1\0*>." + "\15e{\15h\177\21l\203\30s\206\31|\207\0\0\260\235\0\250\226\0\264\245" + "\0\260\235\0\256\234\0\254\232\0\252\230\0\236\215\0\230\210\0\252\230" + "\0\256\217\0\305W\25\306'\10\252\20\0\266\35\4\3263\30\343G\35\341P\27" + "\330S\30\323K\25\305N\23\267D\13l0\0D\40\0:\31\0""2\25\0N'\0W<\11\31" + "Y]\10f~\16i\200\21l\203\30x\206\33v\211\0\0\254\232\0\260\235\0\264\241" + "\0\260\235\0\242\221\0\254\232\0\240\223\0\206\201\0\204|\0\254\232\0" + "\260\235\0\302\216\0\312b\34\311X'\315L\37\324F\32\325M\27\323O\25\312" + "L\24\274G\16\257>\7\212:\0d/\0f0\0h,\0V&\0\204;\0\220G\6""5K8\15bu\16" + "i\200\22p\204\26t\210\33{\211\0\0\266\243\0\256\234\0\262\237\0\254\232" + "\0\252\230\0\222\211\0p\204\0V\214\10k\202\0\242\225\0\264\241\0\262" + "\233\0\272\210\0\301T\13\277L\31\301K\27\277O\27\276M\26\265D\15\253" + "=\7\260\77\2\236;\0\254=\0|2\0n,\0\200<\0\237L\3\251M\11\235T\23:TI\15" + "e{\24o\202\30x\206\32z\210\0\0\266\243\0\270\245\0\262\237\0\254\232" + "\0\242\221\0\204\202\0V\200\16\302\266\0\236\244\4\210\220\0\260\235" + "\0\264\241\0\250\222\0\234r\0\252;\4\255:\15\255>\15\252<\6\240K\0xA" + "\0z+\0x*\0X\35\0""4\27\0N(\0\202:\0\244Y\10\243\202\17\245\202\11\225" + "r\37+eM\21p{\33v\201\31y\207\0\0\264\241\0\266\243\0\264\241\0\256\234" + "\0\230\210\0\244\223\0z\230\0\267\271\7\263\265\3G|\16\222\211\0\264" + "\241\0\254\232\0\220}\0zd\0lJ\0tL\0~h\0\202q\0vd\0@'\0=-\13\16HL\23I" + "M/;\37dR\0Y\222\0M\224\0N\226\0N\226\0A\222\0\24\202#\31}r\32|\210\0" + "\0\270\245\0\266\243\0\266\243\0\264\241\0\232\212\0\236\215\0\230\217" + "\0g\231\5x\240\0\222\215\0\262\243\0\264\241\0\264\241\0\226\206\0~q" + "\0~q\0\210z\0~q\0~q\0ja\0M`\0\20`X\6`p\7aq\17cL\34w\212\0\0\272\246\0\270\245\0\266\243" + "\0\264\241\0\240\217\0\230\210\0\250\226\0\204\202\0\224\210\0\264\241" + "\0\262\237\0\264\241\0\266\243\0\254\232\0\236\215\0\220\201\0\210z\0" + "\210z\0\202t\0~\200\0c\214\0@\226\0\36\227\1(\234\4S\272\0U\264\0M\244" + "\0T\262\0T\262\0S\260\0T\262\0S\250\0\24\202+\32z\210\0\0"}; diff --git a/gui/buttons/col.bmp b/gui/buttons/col.bmp index b1eaa96..a0f3338 100644 Binary files a/gui/buttons/col.bmp and b/gui/buttons/col.bmp differ diff --git a/gui/buttons/preview.bmp b/gui/buttons/preview.bmp index 5bf4672..b1eaa96 100644 Binary files a/gui/buttons/preview.bmp and b/gui/buttons/preview.bmp differ diff --git a/gui/image.c b/gui/image.c index 49f7ec8..afd572e 100644 --- a/gui/image.c +++ b/gui/image.c @@ -18,7 +18,7 @@ GdkPixbuf *img_pixbuf = NULL; int img_width, img_height; int copy_width, copy_height; char img_name[256]; -unsigned short *img_grey_buffer = NULL; +unsigned short *img_grey_buffer = NULL, *img_preview_buffer = NULL; unsigned char *img_mark_buffer = NULL, *img_mark_buffer_undo[UNDO_MAX], *img_mark_buffer_copy; int button_down_x_undo[UNDO_MAX], button_down_y_undo[UNDO_MAX]; int undo_current, undo_num; @@ -29,40 +29,25 @@ extern int button_down_x, button_down_y; /* load image and create pixbuf */ void create_image(const char *filename, int resize) { - static char imgfile[256]; - destroy_image(); anything_modified = 0; strcpy(img_name, filename); - if (rendered) { - const char *p, *q; - p = filename; - while((q = strchr(p, DIR_SEPERATOR))) - p = q + 1; - strcpy(imgfile, filename); - imgfile[p - filename] = '\0'; - strcat(imgfile, "colorized_"); - strcat(imgfile, p); - } else - strcpy(imgfile, filename); - img_grey_buffer = load_img(&img_width, &img_height, imgfile, 0); + img_grey_buffer = load_img(&img_width, &img_height, filename, 0); if (!img_grey_buffer) { - img_grey_buffer = NULL; - if (!rendered) - printerror("Failed to load grey image '%s'", imgfile); - else { - img_width = 16; - img_height = 16; - goto no_mark; - } + printerror("Failed to load grey image '%s'", filename); return; } + if (preview) + create_preview(); + else if (rendered) + create_rendered(filename); img_mark_buffer = malloc(img_width*img_height); if (!img_mark_buffer) { free(img_grey_buffer); img_grey_buffer = NULL; + destroy_preview(); return; } memset(img_mark_buffer, 0, img_width*img_height); @@ -75,11 +60,62 @@ void create_image(const char *filename, int resize) frame_list[timeline_selected].marked = 0; } -no_mark: /* create pixbuf */ create_or_reset_pixbuf(resize); } +void create_preview() +{ + size_t size = img_width*img_height*3*sizeof(*img_preview_buffer); + + destroy_preview(); + + /* no grey image, so no preview */ + if (!img_grey_buffer) { + return; + } + + img_preview_buffer = malloc(size); + if (!img_preview_buffer) { + return; + } + + memcpy(img_preview_buffer, img_grey_buffer, size); +} + +void create_rendered(const char *filename) +{ + static char imgfile[256]; + const char *p, *q; + int width, height; + + destroy_preview(); + + /* no grey image, so no preview */ + if (!img_grey_buffer) { + return; + } + + p = filename; + while((q = strchr(p, DIR_SEPERATOR))) + p = q + 1; + strcpy(imgfile, filename); + imgfile[p - filename] = '\0'; + strcat(imgfile, "colorized_"); + strcat(imgfile, p); + + img_preview_buffer = load_img(&width, &height, imgfile, 0); + if (!img_preview_buffer) { + printerror("Failed to load rendered image '%s'", imgfile); + return; + } + if (width != img_width || height != img_height) { + printerror("Failed to load: Rendered image '%s' has different size", imgfile); + destroy_preview(); + return; + } +} + void create_or_reset_pixbuf(int resize) { int w, h, dw = 0, dh = 0; @@ -161,6 +197,7 @@ void destroy_image(void) free(img_grey_buffer); img_grey_buffer = NULL; + destroy_preview(); free(img_mark_buffer); img_mark_buffer = NULL; for (i = 0; i < UNDO_MAX; i++) { @@ -171,15 +208,20 @@ void destroy_image(void) } } +void destroy_preview(void) +{ + free(img_preview_buffer); + img_preview_buffer = NULL; +} + /* draw (area) of pixbuf */ void draw_image(int x, int y, int w, int h) { GdkDrawable *draw = gtk_widget_get_window(img_drawing_area); int window_width, window_height, x_offset, y_offset; gdk_drawable_get_size (draw, &window_width, &window_height); - double _r, _g, _b, _y, _u, _v, u_palette, v_palette, pat, alpha; + double _r, _g, _b, pat, alpha; int cr, cg, cb; - int _c, preview_asis = 0; if (w < 0) w = window_width; @@ -266,51 +308,16 @@ void draw_image(int x, int y, int w, int h) y -= y_offset; if (img_grey_buffer) { - if (preview) { - rgb2yuv_pixle(mark_palette[mark_selected].r / 255.0F, mark_palette[mark_selected].g / 255.0F, mark_palette[mark_selected].b / 255.0F, &_y, &u_palette, &v_palette); - /* check for white color (no change) */ - if (mark_palette[mark_selected].r == 255 && mark_palette[mark_selected].g == 255 && mark_palette[mark_selected].r == 255) - preview_asis = 1; - } /* compose image (segment) line by line */ for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { - if (preview && !rendered && !flowview) { - /* apply selected color from palette to all pixles */ - _r = img_grey_buffer[((j+x)*16/img_scale_x+img_width*((i+y)*16/img_scale_y))*3] / 65535.0F; - _g = img_grey_buffer[((j+x)*16/img_scale_x+img_width*((i+y)*16/img_scale_y))*3+1] / 65535.0F; - _b = img_grey_buffer[((j+x)*16/img_scale_x+img_width*((i+y)*16/img_scale_y))*3+2] / 65535.0F; - rgb2yuv_pixle(_r, _g, _b, &_y, &_u, &_v); - _y = (_y - 0.5) * mark_palette[mark_selected].contrast + 0.5; - _y += mark_palette[mark_selected].bright; - if (_y < 0) - _y = 0; - if (_y > 1) - _y = 1; - if (preview_asis) - yuv2rgb_pixle(_y, _u, _v, &_r, &_g, &_b); - else - yuv2rgb_pixle(_y, u_palette, v_palette, &_r, &_g, &_b); - _c = _r * 255.0F; - if (_c < 0) - _c = 0; - else if (_c > 255) - _c = 255; - compose[j*3] = _c; - _c = _g * 255.0F; - if (_c < 0) - _c = 0; - else if (_c > 255) - _c = 255; - compose[j*3+1] = _c; - _c = _b * 255.0F; - if (_c < 0) - _c = 0; - else if (_c > 255) - _c = 255; - compose[j*3+2] = _c; - + if (img_preview_buffer) { + /* show preview buffer */ + compose[j*3] = img_preview_buffer[((j+x)*16/img_scale_x+img_width*((i+y)*16/img_scale_y))*3] >> 8; + compose[j*3+1] = img_preview_buffer[((j+x)*16/img_scale_x+img_width*((i+y)*16/img_scale_y))*3+1] >> 8; + compose[j*3+2] = img_preview_buffer[((j+x)*16/img_scale_x+img_width*((i+y)*16/img_scale_y))*3+2] >> 8; } else { + /* show grey buffer */ compose[j*3] = img_grey_buffer[((j+x)*16/img_scale_x+img_width*((i+y)*16/img_scale_y))*3] >> 8; compose[j*3+1] = img_grey_buffer[((j+x)*16/img_scale_x+img_width*((i+y)*16/img_scale_y))*3+1] >> 8; compose[j*3+2] = img_grey_buffer[((j+x)*16/img_scale_x+img_width*((i+y)*16/img_scale_y))*3+2] >> 8; diff --git a/gui/image.h b/gui/image.h index c66b2d9..df25c59 100644 --- a/gui/image.h +++ b/gui/image.h @@ -1,14 +1,17 @@ extern GdkPixbuf *img_pixbuf; extern int img_width, img_height; extern char img_name[]; -extern unsigned short *img_grey_buffer; +extern unsigned short *img_grey_buffer, *img_preview_buffer; extern unsigned char *img_mark_buffer; extern int img_scale_x, img_scale_y; extern int anything_modified; void create_image(const char *filename, int resize); +void create_preview(); +void create_rendered(const char *filename); void create_or_reset_pixbuf(int resize); void destroy_image(void); +void destroy_preview(void); void draw_image(int x, int y, int w, int h); void paint_brush(int x, int y, int size, int paint); void erase_mark(int index); diff --git a/gui/menu.c b/gui/menu.c index b370a67..7642d70 100644 --- a/gui/menu.c +++ b/gui/menu.c @@ -243,10 +243,6 @@ static void show_preview_event(gpointer priv) void colorize_event(gpointer priv) { - if (rendered) { - printerror("Disable colorized view first."); - return; - } #ifdef WITH_OPENCV if (flowview) { printerror("Disable flow view first."); diff --git a/gui/toolbar.c b/gui/toolbar.c index ef02b31..19c5d8e 100644 --- a/gui/toolbar.c +++ b/gui/toolbar.c @@ -145,8 +145,21 @@ void highlight_button_toggled(GtkButton *button, gpointer index) void preview_button_toggled(GtkButton *button, gpointer index) { preview = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)); + if (preview) { + create_preview(); + if (!img_preview_buffer) + preview = 0; + } else if (!rendered) + destroy_preview(); + set_button_toggel_by_label(TOGGLE_LABEL_PREVIEW, preview); set_menu_toggel_by_label(TOGGLE_LABEL_PREVIEW, preview); draw_image(0, 0, -1, -1); + + if (preview && rendered) { + rendered = 0; + set_button_toggel_by_label(TOGGLE_LABEL_RENDERED, rendered); + set_menu_toggel_by_label(TOGGLE_LABEL_RENDERED, rendered); + } } void palette_button_clicked(GtkButton *button, gpointer index) @@ -170,9 +183,21 @@ void view_colorized_button_toggled(GtkButton *button, gpointer index) rendered = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)); else rendered = 0; + if (rendered) { + create_rendered(img_name); + if (!img_preview_buffer) + rendered = 0; + } else if (!preview) + destroy_preview(); gtk_toggle_button_set_active(show_colorized_button, rendered); set_menu_toggel_by_label(TOGGLE_LABEL_RENDERED, rendered); - timeline_select_and_save(timeline_selected, timeline_selected); + draw_image(0, 0, -1, -1); + + if (rendered && preview) { + preview = 0; + set_button_toggel_by_label(TOGGLE_LABEL_PREVIEW, preview); + set_menu_toggel_by_label(TOGGLE_LABEL_PREVIEW, preview); + } } #ifdef WITH_OPENCV