{"id":5136,"date":"2013-09-10T11:13:31","date_gmt":"2013-09-09T17:13:31","guid":{"rendered":"http:\/\/www.moonmile.net\/blog\/?p=5136"},"modified":"2013-09-10T11:18:39","modified_gmt":"2013-09-10T02:18:39","slug":"swf%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%8b%e3%82%89%e7%94%bb%e5%83%8f%e3%82%92%e6%8a%bd%e5%87%ba%e3%81%99%e3%82%8b","status":"publish","type":"post","link":"http:\/\/www.moonmile.net\/blog\/archives\/5136","title":{"rendered":"SWF\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u753b\u50cf\u3092\u62bd\u51fa\u3059\u308b"},"content":{"rendered":"<p>Flash\u306eswf\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u753b\u50cf\u3092\u62bd\u51fa\u3059\u308b&#8230;\u308f\u3051\u306f\u8266\u3053\u308c\u8adc\u5831\u54e1\u7528\u306a\u306e\u3067\u3059\u304c\u3001\u5b8c\u5168\u306b\u5b9f\u88c5\u3059\u308b\u524d\u306b\u30e1\u30e2\u7a0b\u5ea6\u306b\u6b8b\u3057\u3066\u304a\u304d\u307e\u3059\u3002\u3044\u304f\u3064\u304b\u3001MFC\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u304bJava,PHP\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306f\u3042\u308b\u306e\u3067\u3059\u304c\u3001\u3084\u3063\u3071\u308aC#\u306e\u307b\u3046\u304c\u3044\u3044\u3067\u3059\u3088\u306d\u3002<\/p>\n<p>neue cc &#8211; C#\u3067Flash Lite\u306aswf\u3092\u30d0\u30a4\u30ca\u30ea\u7de8\u96c6\u3057\u3066\u7f6e\u63db\u3059\u308b<br \/>\n<a href=\"http:\/\/neue.cc\/2013\/01\/10_393.html\">http:\/\/neue.cc\/2013\/01\/10_393.html<\/a><br \/>\ndebreuil\/Swf2XNA<br \/>\n<a href=\"https:\/\/github.com\/debreuil\/Swf2XNA\">https:\/\/github.com\/debreuil\/Swf2XNA<\/a><br \/>\nSWF\u30d0\u30a4\u30ca\u30ea\u7de8\u96c6\u306e\u30b9\u30b9\u30e1\u7b2c\u4e09\u56de (JPEG) | GREE Engineers&#8217; Blog<br \/>\n<a href=\"http:\/\/labs.gree.jp\/blog\/2010\/09\/782\/\">http:\/\/labs.gree.jp\/blog\/2010\/09\/782\/<\/a><\/p>\n<p>github \u306b Swf2XNA \u3068\u3044\u3046\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u3042\u308a\u307e\u3059\u3002neue \u3055\u3093\u8a00\u3046\u901a\u308a\u3001\u5b8c\u5168\u306b\u4f7f\u3046\u306b\u306f XNA \u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u5fc5\u8981\u306a\u306e\u3067\u3059\u304c\u3001\u305d\u3053\u307e\u3067\u9762\u5012\u3067\u306f\u306a\u304f\u3066 SwfFormat \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3060\u3051\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n<p>\u203b\u4e00\u5fdc\u3001\u4f46\u3057\u66f8\u304d\u3092\u66f8\u3044\u3066\u304a\u304d\u307e\u3059\u304c\u3001\u753b\u50cf\u306e\u8457\u4f5c\u6a29\u306f\u8266\u3053\u308c\u81ea\u4f53\u306b\u5e30\u5c5e\u3059\u308b\u306e\u3067\u3001\u60aa\u7528\u3057\u306a\u3044\u3088\u3046\u306b\u3002<\/p>\n<p>\u25a0\u624b\u3063\u53d6\u308a\u65e9\u304f\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3092\u62bd\u51fa\u3057\u305f\u3044<\/p>\n<p>\u7528\u9014\u3068\u3057\u3066\u306f\u3001\u8266\u3053\u308c\u3067\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u3044\u308b *.swf \u30d5\u30a1\u30a4\u30eb\u304b\u3089\u753b\u50cf\u3092\u629c\u304d\u51fa\u3057\u305f\u3044\u3060\u3051\u3067\u3059\u3002\u753b\u50cf\u306e\u53d6\u308a\u51fa\u3057\u81ea\u4f53\u306f <a href=\"http:\/\/www.forest.impress.co.jp\/library\/software\/hugflash\/\">HugFlash &#8211; \u7a93\u306e\u675c\u30e9\u30a4\u30d6\u30e9\u30ea<\/a>\u00a0 \u3068\u3044\u3046\u30c4\u30fc\u30eb\u304c\u3042\u308b\u306e\u3067\u3001\u7279\u306b\u554f\u984c\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u8266\u3053\u308c\u8adc\u5831\u54e1\u306e\u699b\u540d\u306e\u753b\u50cf\u306f\u3001\u3053\u308c\u3092\u4f7f\u3063\u3066\u53d6\u308a\u51fa\u3057\u305f\u3082\u306e\u3067\u3059\u304c\u3002\u304c\u3001\u3069\u3046\u305b\u306a\u3089\u3070\u5b9f\u884c\u6642\u306b\u753b\u50cf\u3092\u53d6\u308a\u51fa\u3057\u305f\u3044\u3067\u3059\u3088\u306d\u3002\u305d\u3046\u3059\u308b\u3068\u3001\u79d8\u66f8\u8266\u3092\u5909\u3048\u305f\u3068\u304d\u306b\u3001\u540c\u671f\u3057\u3066\u8adc\u5831\u54e1\u306e\u753b\u50cf\u3082\u5909\u3048\u308b\u3053\u3068\u304c\u3067\u3044\u305d\u3046\u3067\u3059\u3002<\/p>\n<p>\u3055\u3066\u3001\u5148\u306e\u8a18\u4e8b\u3092\u8aad\u3080\u3068 Flash \u306e\u4e2d\u8eab\u306f Tag \u306b\u5206\u304b\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u4e2d\u3067\u753b\u50cf\u306b\u95a2\u4fc2\u3059\u308b\u3068\u3053\u308d\u306e<\/p>\n<ul>\n<li>TagType.DefineBits<\/li>\n<li>TagType.DefineBitsJPEG2<\/li>\n<li>TagType.DefineBitsJPEG3<\/li>\n<\/ul>\n<p>\u306e3\u3064\u3092\u53d6\u308a\u51fa\u305b\u3070\u3088\u3055\u305d\u3046\u3067\u3059\u3002\u5b9f\u306f\u3001TagType.DefineBits \u306e\u3068\u304d\u306e JPEGTables+DefineBits \u306e\u7d44\u307f\u5408\u308f\u305b\u306f\u771f\u9762\u76ee\u306b\u3084\u3089\u306a\u3044\u3068\u3044\u3051\u306a\u3044\u306e\u3067\u3059\u304c\u3001\u5e78\u3044\u306b\u3057\u3066\uff08\uff1f\uff09\u3001\u8266\u3053\u308c\u3067\u6271\u3063\u3066\u3044\u308b swf \u306f JPEGTables \u306e\u9577\u3055\u304c 0 \u306e\u305f\u3081\u306b\u3001\u305d\u306e\u307e\u307e DefineBits \u5185\u306e\u30d0\u30a4\u30ca\u30ea\u30c7\u30fc\u30bf\u304c\u4f7f\u3048\u307e\u3059\u3002\u3053\u308c\u3067\u3044\u3044\u306e\u304b\u3069\u3046\u304b\u306f\u4e0d\u660e\u306a\u306e\u3067\u3059\u304c\u3001\u307e\u3042\u3001\u7528\u9014\u306b\u8db3\u308a\u308b\u306e\u3067\u3002<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nprivate void button1_Click(object sender, EventArgs e)\r\n{\r\n    var reader = new SwfReader(File.ReadAllBytes(@&amp;quot;d:work14.swf&amp;quot;));\r\n    var swf = new SwfCompilationUnit(reader);\r\n    var lst = swf.Tags.FindAll(x =&gt;\r\n        x.TagType == TagType.DefineBits ||\r\n        x.TagType == TagType.DefineBitsJPEG3 ||\r\n        x.TagType == TagType.DefineBitsJPEG2);\r\n    int i = 1;\r\n    foreach (var it in lst)\r\n    {\r\n        var tag = it as DefineBitsTag;\r\n        var path = string.Format(@&amp;quot;d:work14-{0}.png&amp;quot;,tag.CharacterId);\r\n        Bitmap bmp = tag.ToBitmap();\r\n        if (bmp != null)\r\n        {\r\n            bmp.Save(path, ImageFormat.Png);\r\n        }\r\n        i++;\r\n    }\r\n}\r\n<\/pre>\n<p>File.ReadAllBytes \u30e1\u30bd\u30c3\u30c9\u3067 byte[] \u3068\u3057\u3066\u53d6\u308a\u51fa\u3057\u30c7\u30fc\u30bf\u3092 SwfReader \u3092\u55b0\u308f\u305b\u305f\u5f8c\u3001SwfCompilationUnit \u30af\u30e9\u30b9\u3067\u30d1\u30fc\u30b9\u3057\u307e\u3059\u3002\u305d\u306e\u3042\u3068\u3001Tags \u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u306e\u4e2d\u8eab\u3092\u8997\u3051\u3070OK\u3067\u3059\u3002<br \/>\nDefineBitsTag \u30af\u30e9\u30b9\u306e ToBitmap \u30e1\u30bd\u30c3\u30c9\u306f\u81ea\u4f5c\u306e\u62e1\u5f35\u30e1\u30bd\u30c3\u30c9\u3067\u3059\u3002<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npublic static class DefineBitsTagExtention\r\n{\r\n    public static Bitmap ToBitmap(this DefineBitsTag tag)\r\n    {\r\n        Bitmap png = null;\r\n        if (tag.TagType == TagType.DefineBitsJPEG2 ||\r\n            tag.TagType == TagType.DefineBitsJPEG3)\r\n        {\r\n            if (tag.HasAlphaData == false)\r\n            {\r\n                var mem = new MemoryStream(tag.JpegData);\r\n                png = new Bitmap(mem);\r\n                \/\/mem.Close();\r\n            }\r\n            else\r\n            {\r\n                var mem = new MemoryStream(tag.JpegData);\r\n                Bitmap bmp = new Bitmap(mem);\r\n                png = new Bitmap(bmp.Width, bmp.Height);\r\n                Graphics g = Graphics.FromImage(png);\r\n                g.DrawImage(bmp, 0, 0);\r\n                var alpha = SwfReader.Decompress(tag.CompressedAlphaData,\r\n\t\t\t\t\t(uint)(bmp.Width * bmp.Height));\r\n                int j = 0;\r\n                for (int y = 0; y &lt; bmp.Height; y++)\r\n                {\r\n                    for (int x = 0; x &lt; bmp.Width; x++)\r\n                    {\r\n                        int a = alpha&#x5B;j];\r\n                        var c = bmp.GetPixel(x, y);\r\n                        var col = Color.FromArgb(a, c);\r\n                        png.SetPixel(x, y, col);\r\n                        j++;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        else if (tag.TagType == TagType.DefineBits)\r\n        {\r\n            int size = tag.JpegData.Count() + 4;\r\n            byte&#x5B;] buf = new byte&#x5B;size];\r\n\r\n            for (int i = 0; i &lt; tag.JpegData.Count(); i++)\r\n            {\r\n                buf&#x5B;i + 2] = tag.JpegData&#x5B;i];\r\n            }\r\n            buf&#x5B;0] = 0xFF;\r\n            buf&#x5B;1] = 0xD8;\r\n            buf&#x5B;2+tag.JpegData.Count()] = 0xFF;\r\n            buf&#x5B;2+tag.JpegData.Count()+1] = 0xD9;\r\n            var mem = new MemoryStream(buf);\r\n            png = new Bitmap(mem);\r\n            \/\/ mem.Close();\r\n        }\r\n        return png;\r\n    }\r\n}\r\n<\/pre>\n<p>DefineBitsJPEG2 \u3068 DefineBitsJPEG3 \u306e\u5834\u5408\u306f\u3001\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u305d\u306e\u3082\u306e\uff08jpeg,png,gif\uff09\u304c JpegData \u914d\u5217\u306b\u5165\u3063\u3066\u3044\u308b\u306e\u3067\u3001Bitmap \u306b\u843d\u3068\u305b\u307e\u3059\u3002\u30a2\u30eb\u30d5\u30a1\u30c1\u30e3\u30f3\u30cd\u30eb\u304c\u3042\u308b\u5834\u5408\u306f\u3001HasAlphaData \u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u900f\u904e\u30c7\u30fc\u30bf\u3092\u8ffd\u52a0\u3057\u3066\u3084\u308a\u307e\u3059\u3002\u3044\u3061\u3044\u3061 GetPixel\/SetPixel \u3068\u3084\u308b\u3068\u30b9\u30d4\u30fc\u30c9\u304c\u9045\u3044\u306e\u3067\u3001\u9069\u5f53\u306b unsafe \u3057\u3066\u30d0\u30a4\u30ca\u30ea\u3092\u76f4\u63a5\u6271\u3046\u3068\u304b\u3059\u308b\u3068\u826f\u3044\u3067\u3057\u3087\u3046\u3002\u5b9f\u969b SwfFormat \u306e\u4e2d\u3067\u306f\u305d\u3046\u3044\u3046\u30b3\u30fc\u30c9\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>JPEGTables + DefineBits \u306e\u7d44\u307f\u5408\u308f\u305b\u306e\u3068\u304d\u306f\u3001\u672c\u5f53\u306f\u304d\u3061\u3093\u3068\u3084\u3089\u306a\u3044\u3068\u99c4\u76ee\u306a\u306e\u3067\u3059\u304c\u3001\u305d\u3082\u305d\u3082\u304c JPEGTables \u306e\u30b5\u30a4\u30ba\u304c 0 \u306a\u306e\u3067\u3001\u3053\u3053\u3067\u306f\u6c7a\u3081\u6253\u3061\u3067\u66f8\u3044\u3066\u3044\u307e\u3059\u3002\u524d\u5f8c\u306b SOI \u3068 EOI \u3092\u8ffd\u52a0\u3057\u3066\u3084\u308c\u3070 JPENG \u3068\u3057\u3066\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/p>\n<p><a href=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2013\/09\/wpid-dworkblogimage20130910_01org.jpg\"><img decoding=\"async\" src=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2013\/09\/wpid-dworkblogimage20130910_01thum.jpg\" border=\"0\" \/><\/a><\/p>\n<p>\u3053\u3093\u306a\u98a8\u306b\u5168\u3066\u306e\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3092\u62bd\u51fa\u3067\u304d\u307e\u3059&#8230;\u3068\u601d\u3063\u305f\u306e\u3067\u3059\u304c\u3001HugFlash \u306e\u51fa\u529b\u3068\u898b\u6bd4\u3079\u308b\u3068\u3001\u3072\u3068\u3064\u3060\u3051\u30d5\u30a1\u30a4\u30eb\u304c\u8db3\u308a\u306a\u3044\u3093\u3067\u3059\u3088\u306d\u3002\u3069\u3046\u3084\u3089\u3001TagType.DefineBitsLossless \u304b TagType.DefineBitsLossless2 \u306b\u5165\u3063\u3066\u3044\u308b\u753b\u50cf\u30c7\u30fc\u30bf\u3092\u5fd8\u308c\u3066\u3044\u305f\u6a21\u69d8\u3002\u3053\u308c\u306f\u3061\u3087\u3063\u3068\u5f8c\u3067\u3002<\/p>\n<p>\u25a0\u79d8\u66f8\u8266\u306e\u5207\u308a\u66ff\u3048\u30e1\u30e2<\/p>\n<p>\u3053\u3093\u306a\u8a33\u3067\u3001\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306b\u753b\u50cf\u62bd\u51fa\u304c\u3067\u304d\u305d\u3046\u3067\u3059\u3002\u3061\u306a\u307f\u306b SwfFormat \u3092\u4f7f\u3046\u3068\u300c\u753b\u50cf\u6539\u5909\u300d\u3082\u3067\u304d\u308b\u306e\u3067\u3001Faddler \u3068\u7d44\u307f\u5408\u308f\u305b\u308c\u3070\u3001\u3042\u3093\u306a\u753b\u50cf\u3084\u3053\u3093\u306a\u753b\u50cf\u3067\u3059\u308a\u66ff\u3048\u308b\u3053\u3068\u306f\u53ef\u80fd\u3067\u3059\u306d\u3002\u305f\u3060\u3057\u3001Faddler \u81ea\u4f53\u304c\u30d7\u30ed\u30ad\u30b7\u306a\u306e\u3067\u5dee\u3057\u66ff\u3048\u306f\u53ef\u80fd\u3060\u3057\u3001\u3057\u304b\u3057\u3001304 \u3067\u30ed\u30fc\u30ab\u30eb\u30ad\u30e3\u30c3\u30b7\u30e5\u304b\u3089\u6301\u3063\u3066\u304d\u3066\u3044\u308b\u554f\u984c\u3082\u3042\u308b\u306e\u3067\u7c21\u5358\u306b\u306f\u5dee\u3057\u66ff\u3048\u3067\u304d\u306a\u3044\u3068\u3044\u3046\u8981\u56e0\u3082\u3042\u308a\u307e\u3059\u304c\u3002<\/p>\n<p>\u3072\u3068\u307e\u305a\u300113\u756a\u306815\u756a\u6c7a\u3081\u6253\u3061\u3067\u753b\u50cf\u3092\u53d6\u308a\u51fa\u3057\u3066\u3001\u8adc\u5831\u54e1\u306e\u753b\u50cf\u3092\u5207\u308a\u304b\u3048\u308b\u3053\u3068\u306f\u53ef\u80fd\u305d\u3046\u3067\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Flash\u306eswf\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u753b\u50cf\u3092\u62bd\u51fa\u3059\u308b&#8230;\u308f\u3051\u306f\u8266\u3053\u308c\u8adc\u5831\u54e1\u7528\u306a\u306e\u3067\u3059\u304c\u3001\u5b8c\u5168\u306b\u5b9f\u88c5\u3059\u308b\u524d\u306b\u30e1\u30e2\u7a0b\u5ea6\u306b\u6b8b\u3057\u3066\u304a\u304d\u307e\u3059\u3002\u3044\u304f\u3064\u304b\u3001MFC\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u304bJava,PHP\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306f\u3042\u308b\u306e\u3067\u3059\u304c\u3001\u3084\u3063\u3071\u308aC &hellip; <a href=\"http:\/\/www.moonmile.net\/blog\/archives\/5136\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3,23],"tags":[],"class_list":["post-5136","post","type-post","status-publish","format-standard","hentry","category-dev","category-csharp"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/5136","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/comments?post=5136"}],"version-history":[{"count":3,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/5136\/revisions"}],"predecessor-version":[{"id":5139,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/5136\/revisions\/5139"}],"wp:attachment":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/media?parent=5136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/categories?post=5136"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/tags?post=5136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}