{"id":3848,"date":"2021-11-20T01:29:20","date_gmt":"2021-11-19T16:29:20","guid":{"rendered":"https:\/\/androiphone.uvs.jp\/?p=3848"},"modified":"2021-11-20T01:33:05","modified_gmt":"2021-11-19T16:33:05","slug":"esp32-esp32%e3%81%a7gif%e3%82%92%e8%bb%bd%e9%87%8fgif%e3%83%87%e3%82%b3%e3%83%bc%e3%83%80%e3%81%a7%e3%83%87%e3%82%b3%e3%83%bc%e3%83%89%e3%81%99%e3%82%8b","status":"publish","type":"post","link":"https:\/\/androiphone.uvs.jp\/?p=3848","title":{"rendered":"[ESP32] ESP32\u3067GIF\u3092\u8efd\u91cfGIF\u30c7\u30b3\u30fc\u30c0\u3067\u30c7\u30b3\u30fc\u30c9\u3059\u308b"},"content":{"rendered":"<hr \/>\n<p><span style=\"color: #ff6600;\"><strong><span style=\"font-size: 24pt;\">\u307e\u305a\u2026\u306a\u305cGIF\u306a\u306e\u304b?<\/span><\/strong><\/span><\/p>\n<p><span style=\"color: #ff0000;\"><strong><span style=\"font-size: 18pt;\"><span class=\"crayon-e\">\u300cesp32\u3068TFT\u6db2\u6676\u3067<\/span>\u5f37\u9707\u30e2\u30cb\u30bf\u3092\u4f5c\u308a\u305f\u3044\u300d<\/span><\/strong><\/span><\/p>\n<p>\u3092\u524d\u63d0\u306b\u8272\u3005\u8a66\u884c\u932f\u8aa4\u3057\u3066\u3044\u307e\u3059\u3002\u524d\u306eTTS\u306e\u8a18\u4e8b\u3082\u305d\u306e\u4e00\u74b0\u3067\u3059\u3002\u5f37\u9707\u30e2\u30cb\u30bf\u3068\u306f\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u7dca\u6025\u5730\u9707\u901f\u5831(\u4e88\u5831\u3082\u542b\u3081\u308b)\u3092\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u30a2\u30ec\u3067\u3059\u3002<\/p>\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"http:\/\/www.kmoni.bosai.go.jp\" data-lkc-id=\"849\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=www.kmoni.bosai.go.jp\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">www.kmoni.bosai.go.jp<\/div><div class=\"lkc-share\"> <div class=\"lkc-sns-x\">12 Posts<\/div> <div class=\"lkc-sns-hb\">25 Users<\/div> <div class=\"lkc-sns-po\">51 Pockets<\/div><\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"https:\/\/s.wordpress.com\/mshots\/v1\/http%3A%2F%2Fwww.kmoni.bosai.go.jp?w=100\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">\u5f37\u9707\u30e2\u30cb\u30bf<\/div><div class=\"lkc-url\" title=\"http:\/\/www.kmoni.bosai.go.jp\">http:\/\/www.kmoni.bosai.go.jp<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<p>web\u30da\u30fc\u30b8\u3092\u5206\u6790\u3057\u3066\u307f\u308b\u3068<\/p>\n<p><a href=\"https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-19_23-27-32_No-00.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3852\" src=\"https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-19_23-27-32_No-00-300x79.jpg\" alt=\"\" width=\"700\" height=\"184\" srcset=\"https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-19_23-27-32_No-00-300x79.jpg 300w, https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-19_23-27-32_No-00-1024x271.jpg 1024w, https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-19_23-27-32_No-00-768x203.jpg 768w, https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-19_23-27-32_No-00.jpg 1405w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/p>\n<p>\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306bGIF\u30d5\u30a1\u30a4\u30eb\u3092DL\u3057\u3066\u3092\u91cd\u306d\u3066\u8868\u793a\u3057\u3066\u3044\u308b\u3088\u3046\u3067\u3059\u3002\u306a\u306e\u3067GIF\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u3059\u3002<\/p>\n<hr \/>\n<p><span style=\"color: #ff6600;\"><strong><span style=\"font-size: 24pt;\">ESP32\u3067TFT\u6db2\u6676(ILI9486)\u3092\u4f7f\u3046\u6e96\u5099<\/span><\/strong><\/span><\/p>\n<p>ILI9486\u3067\u3042\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001TFT\u6db2\u6676\u3092\u4f7f\u3046\u3068\u306a\u308b\u3068\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u5fc5\u9808\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>TFT\u6db2\u6676\u7528\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306f\u4f55\u500b\u304b\u5019\u88dc\u304c\u3042\u308a\u307e\u3059\u3002\u50d5\u304c\u6e21\u308a\u6b69\u3044\u305f\u306e\u306f\u4e0b\u306e3\u3064\u3067\u3059\u3002<\/p>\n<p><strong><span style=\"font-size: 14pt; color: #0000ff;\">Adafruit-GFX-Library<\/span><\/strong><\/p>\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/github.com\/adafruit\/Adafruit-GFX-Library\" data-lkc-id=\"850\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=github.com\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">GitHub<\/div><div class=\"lkc-share\"> <div class=\"lkc-sns-hb\">3 Users<\/div> <div class=\"lkc-sns-po\">71 Pockets<\/div><\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"\/\/androiphone.uvs.jp\/wp-content\/uploads\/pz-linkcard\/cache\/126f99d69a4143a3dd66c11cf01037b5a48b7e637ffbbbfeac072b87f1dbb829.jpeg\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">GitHub - adafruit\/Adafruit-GFX-Library: Adafruit GFX graphics core library, t...<\/div><div class=\"lkc-url\" title=\"https:\/\/github.com\/adafruit\/Adafruit-GFX-Library\">https:\/\/github.com\/adafruit\/Adafruit-GFX-Library<\/div><div class=\"lkc-excerpt\">Adafruit GFX graphics core library, this is the &#039;core&#039; class that all our other graphics libraries derive from - GitHub - adafruit\/Adafruit-GFX-Library: Adafruit GFX graphics core library, ...<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<p><span style=\"font-size: 14pt; color: #0000ff;\"><strong>TFT_eSPI<\/strong><\/span><\/p>\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/github.com\/Bodmer\/TFT_eSPI\" data-lkc-id=\"851\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=github.com\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">GitHub<\/div><div class=\"lkc-share\"> <div class=\"lkc-sns-hb\">5 Users<\/div> <div class=\"lkc-sns-po\">158 Pockets<\/div><\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"\/\/androiphone.uvs.jp\/wp-content\/uploads\/pz-linkcard\/cache\/7f6f9c57728434b67927d11d230def492ed5981f0060874c86ec97aa18120e15.jpeg\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">GitHub - Bodmer\/TFT_eSPI: Arduino and PlatformIO IDE compatible TFT library o...<\/div><div class=\"lkc-url\" title=\"https:\/\/github.com\/Bodmer\/TFT_eSPI\">https:\/\/github.com\/Bodmer\/TFT_eSPI<\/div><div class=\"lkc-excerpt\">Arduino and PlatformIO IDE compatible TFT library optimised for the Raspberry Pi Pico (RP2040), STM32, ESP8266 and ESP32 that supports different driver chips - GitHub - Bodmer\/TFT_eSPI: Arduino and...<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<p><strong><span style=\"font-size: 14pt; color: #0000ff;\">LovyanGFX<\/span><\/strong><\/p>\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/github.com\/lovyan03\/LovyanGFX\" data-lkc-id=\"852\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=github.com\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">GitHub<\/div><div class=\"lkc-share\"> <div class=\"lkc-sns-hb\">7 Users<\/div> <div class=\"lkc-sns-po\">42 Pockets<\/div><\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"\/\/androiphone.uvs.jp\/wp-content\/uploads\/pz-linkcard\/cache\/4d30af12cdc05df166d8395d644bb4080a214dd86455ece2128482405be45908.jpeg\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">GitHub - lovyan03\/LovyanGFX: SPI LCD graphics library for ESP32 (ESP-IDF\/Ardu...<\/div><div class=\"lkc-url\" title=\"https:\/\/github.com\/lovyan03\/LovyanGFX\">https:\/\/github.com\/lovyan03\/LovyanGFX<\/div><div class=\"lkc-excerpt\">SPI LCD graphics library for ESP32 (ESP-IDF\/ArduinoESP32) \/ ESP8266 (ArduinoESP8266) \/ SAMD51(Seeed ArduinoSAMD51) - GitHub - lovyan03\/LovyanGFX: SPI LCD graphics library for ESP32 (ESP-IDF\/Arduino...<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<p>\u3053\u306e\u4e2d\u3067\u4e00\u756a\u9ad8\u6a5f\u80fd\u3001\u3057\u304b\u3082\u65e5\u672c\u4eba\u306a\u3089\u3001<span style=\"color: #ff6600;\"><strong><span style=\"font-size: 18pt;\">LovyanGFX<\/span><\/strong><\/span>\u4e00\u629e\u3067\u3059\uff01\uff01\u958b\u767a\u8005\u306e\u300c\u3089\u3073\u3084\u3093\u300d\u3055\u3093\u306f\u65e5\u672c\u4eba\u3067\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9\u3082\u591a\u304f\u3042\u308a\u9ad8\u6027\u80fd\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3059\u3002\u66f8\u304d\u51fa\u3057\u6642\u306b\u62e1\u5927\u30fb\u7e2e\u5c0f\u304c\u3067\u304d\u305f\u308a\u3001\u65e5\u672c\u8a9e\u51fa\u529b\u304c\u6a19\u6e96\u3067\u3067\u304d\u305f\u308a(\u3053\u308c\u306f\u4fbf\u5229!!)\u3001\u6d77\u5916\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u306f\u306a\u3044\u4fbf\u5229\u306a\u3053\u3068\u304c\u3067\u304d\u3066\u5927\u5909\u52a9\u304b\u308a\u307e\u3057\u305f\u3002Adafruit\u306e\u8b39\u88fd\u30e9\u30a4\u30d6\u30e9\u30ea\u306f\u901f\u5ea6\u9762\u3067\u9045\u3044\u30a4\u30e1\u30fc\u30b8\u3001TFT_eSPI\u3082\u9ad8\u6a5f\u80fd\u3067\u3059\u304c\u3001\u65e5\u672c\u8a9e\u51fa\u529b\u306a\u3093\u3066\u6d77\u5916\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u3042\u308b\u308f\u3051\u3082\u306a\u304f\u2026\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9\u3092\u8aad\u3080\u3068<\/p>\n<blockquote><p><strong><span style=\"color: #ff0000; font-size: 18pt;\">\u6700\u521d\u304b\u3089LovyanGFX\u4f7f\u3063\u3068\u3051\u3070\u3088\u304b\u3063\u305fOTL<\/span><\/strong><\/p><\/blockquote>\n<p>\u57fa\u672c\u7684\u306a\u547d\u4ee4\u306f\u6a19\u6e96\u30e9\u30a4\u30d6\u30e9\u30ea\u3084TFT_eSPT\u3068\u540c\u3058\u30e1\u30bd\u30c3\u30c9\u3067\u3059\u306e\u3067\u3059\u3093\u306a\u308a\u79fb\u884c\u3067\u304d\u307e\u3059\u3002<\/p>\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/lang-ship.com\/blog\/work\/lovyangfx-1\/\" data-lkc-id=\"853\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=lang-ship.com\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">Lang-ship<\/div><div class=\"lkc-share\"> <div class=\"lkc-sns-hb\">3 Users<\/div> <div class=\"lkc-sns-po\">9 Pockets<\/div><\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"\/\/androiphone.uvs.jp\/wp-content\/uploads\/pz-linkcard\/cache\/f979f408aaae5955ceb00e0c1829f6fb8c7f62d9e6b68f63c3333ec5f1bddc24.jpeg\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">LovyanGFX\u5165\u9580 \u305d\u306e1 \u57fa\u672c\u63cf\u753b\u7cfb<\/div><div class=\"lkc-url\" title=\"https:\/\/lang-ship.com\/blog\/work\/lovyangfx-1\/\">https:\/\/lang-ship.com\/blog\/work\/lovyangfx-1\/<\/div><div class=\"lkc-excerpt\">\u6982\u8981\u3089\u3073\u3084\u3093\u3055\u3093\u4f5c\u306eLovyanGFX\u3092\u3001\u81ea\u4f5cM5Lite\u30e9\u30a4\u30d6\u30e9\u30ea\u306a\u3069\u3067\u5229\u7528\u3055\u305b\u3066\u3044\u305f\u3060\u3044\u3066\u3044\u307e\u3059\u304c\u3001\u63cf\u753b\u7cfb\u306e\u89e3\u8aac\u7528\u3068\u3057\u3066\u3001LovyanGFX\u306e\u4f7f\u3044\u65b9\u3092\u78ba\u8a8d\u3057\u306a\u304a\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002\u4e0a\u8a18\u306b\u307e\u3068\u3081\u305f\u8cc7\u6599\u304c\u7f6e\u3044\u3066\u3042\u308a\u307e\u3059\u3002LovyanGFX\u3068\u306f<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<p>esp32\u3068\u306e\u63a5\u7d9a\u3084\u30c7\u30e2\u306e\u8868\u793a\u306e\u4f8b\u306f\u305f\u304f\u3055\u3093\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u305d\u3061\u3089\u3092\u53c2\u8003\u306b\u753b\u9762\u8868\u793a\u3067\u304d\u308b\u307e\u3067\u3057\u3068\u304d\u307e\u3059\u3002\u3053\u308c\u304c\u3067\u304d\u306a\u3044\u3068\u30c7\u30b3\u30fc\u30c9\u3057\u3066\u3082\u8868\u793a\u307e\u3067\u305f\u3069\u308a\u7740\u3051\u307e\u305b\u3093\u3002<\/p>\n<hr \/>\n<p><strong><span style=\"font-size: 24pt; color: #ff6600;\">GIF\u306e\u30c7\u30b3\u30fc\u30c0\u30fc\u3092\u63a2\u3057\u307e\u304f\u308b<\/span><\/strong><\/p>\n<p>LovyanGFX\u3067\u306fJPEG\u306flcd.<span class=\"crayon-e\">drawJpgFile\u3067\u3059\u3050\u8868\u793a\u3067\u304d\u308b\u3088\u3046\u3067\u3059\u3002<strong>TJpg_Decoder<\/strong>\u3068\u304b\u3067\u30c7\u30b3\u30fc\u30c9\u3057\u3066\u305f\u306e\u306f\u4f55\u3060\u3063\u305f\u3093\u3060\u308d\u3046\u3068\u601d\u3063\u3066\u3057\u307e\u3044\u307e\u3059\u3002<\/span><\/p>\n<blockquote><p><span style=\"color: #0000ff;\"><strong><span class=\"crayon-e\" style=\"font-size: 18pt;\">GIF\u3082\u30c7\u30b3\u30fc\u30c0\u3042\u308b\u306e\u304b\u306a\u3041(\uff9c\uff78\uff9c\uff78<\/span><\/strong><\/span><\/p><\/blockquote>\n<p><a href=\"https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-19_23-35-19_No-00.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3854\" src=\"https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-19_23-35-19_No-00-262x300.jpg\" alt=\"\" width=\"329\" height=\"377\" srcset=\"https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-19_23-35-19_No-00-262x300.jpg 262w, https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-19_23-35-19_No-00-896x1024.jpg 896w, https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-19_23-35-19_No-00-768x878.jpg 768w, https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-19_23-35-19_No-00.jpg 1088w\" sizes=\"auto, (max-width: 329px) 100vw, 329px\" \/><\/a><\/p>\n<blockquote><p><strong><span style=\"color: #339966; font-size: 14pt;\">\u30c1\u30fc\u30f3\u3002AnimatedGIF\u3092\u4f7f\u3044\u307e\u3057\u3087\u3046\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u306d\u3002<\/span><\/strong><\/p><\/blockquote>\n<p>\u3089\u3073\u3084\u3093\u3055\u3093\u304c\u8a00\u3046\u306a\u3089\u9593\u9055\u3044\u306a\u3044\u3067\u3059\uff01AnimatedGIF\u306e\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9\u3092\u8aad\u3093\u3067\u307f\u307e\u3057\u305f\u3002\u7d50\u69cb\u3001\u6a5f\u80fd\u6e80\u8f09\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3057\u3066\u3001<\/p>\n<blockquote><p><span style=\"font-size: 14pt; color: #000080;\"><strong>\u3082\u3063\u3068GIF\u30d5\u30a1\u30a4\u30eb(\u9759\u6b62\u753b)\u3092\u30b5\u30c3\u3068\u30c7\u30b3\u30fc\u30c9\u3067\u304d\u305d\u3046\u306a\u7c21\u5358\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u306f\u306a\u3044\u304b\u306a\u3041\uff5e(\u8d05\u6ca2<\/strong><\/span><\/p><\/blockquote>\n<p>\u3068\u63a2\u3057\u3066\u306f\u307f\u305f\u3093\u3067\u3059\u3051\u3069\u610f\u5916\u306b\u306a\u3044\u3093\u3067\u3059\u306dw\u3067\u3001\u898b\u3064\u3051\u305f\u8a18\u4e8b\u304c<\/p>\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/blog.boochow.com\/article\/428487132.html\" data-lkc-id=\"854\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=blog.boochow.com\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">blog.boochow.com<\/div><div class=\"lkc-share\"> <div class=\"lkc-sns-po\">4 Pockets<\/div><\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"\/\/androiphone.uvs.jp\/wp-content\/uploads\/pz-linkcard\/cache\/0770223f8f44f866b566bde9a1fa6409e0229fc56d98d6fc99da12c0d93f4f58.jpeg\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">https:\/\/blog.boochow.com\/article\/428487132.html<\/div><div class=\"lkc-url\" title=\"https:\/\/blog.boochow.com\/article\/428487132.html\">https:\/\/blog.boochow.com\/article\/428487132.html<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<p>\u3067\u3059\u3002\u3053\u306e\u8a18\u4e8b\u3092\u66f8\u3044\u305f\u4eba\u3082\u8efd\u91cf\u30c7\u30b3\u30fc\u30c0\u30fc\u3092\u63a2\u3057\u3066\u3044\u307e\u3057\u305f\u3002\u306a\u3093\u3068\u4e0b\u306e\u65b9\u306b\u30b7\u30f3\u30d7\u30eb\u306a\u30c7\u30b3\u30fc\u30c0\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u304c\u8f09\u3063\u3066\u3044\u308b\u3067\u306f\u306a\u3044\u3067\u3059\u304b\u3002<\/p>\n<hr \/>\n<p><span style=\"color: #ff6600;\"><strong><span style=\"font-size: 24pt;\">GIF\u30c7\u30b3\u30fc\u30c0\u306e\u6539\u826f<\/span><\/strong><\/span><\/p>\n<p>\u3055\u304d\u307b\u3069\u306e\u8a18\u4e8b\u306e\u30c7\u30b3\u30fc\u30c0\u3092\u65e9\u901f\u30b3\u30d4\u30da\u3057\u3066\u52d5\u304b\u3057\u305f\u3068\u3053\u308d\u3001GIF\u30d5\u30a1\u30a4\u30eb\u304c\u8868\u793a\u3067\u304d\u307e\u305b\u3093\u3002\u3068\u3044\u3046\u304b\u3001\u3044\u308d\u3044\u308d\u8a66\u3059\u3068\u8868\u793a\u3067\u304d\u308b\u306e\u3082\u3042\u308c\u3070\u3067\u304d\u306a\u3044\u3082\u306e\u3082\u3042\u308a\u307e\u3059\u3002\u3088\u304f\u8abf\u3079\u3066\u307f\u308b\u3068init_decoder()\u3067\u8ca0\u6570\u304c\u8fd4\u3063\u3066\u304d\u3066\u3044\u308b\u3088\u3046\u3067\u3059\u3002<\/p>\n<p><a href=\"https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2019\/12\/6481392ce1eb65bf23008700470e2d1f.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2794\" src=\"https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2019\/12\/6481392ce1eb65bf23008700470e2d1f-300x171.jpg\" alt=\"\" width=\"300\" height=\"171\" srcset=\"https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2019\/12\/6481392ce1eb65bf23008700470e2d1f-300x171.jpg 300w, https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2019\/12\/6481392ce1eb65bf23008700470e2d1f.jpg 391w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>\u3053\u308c\u306f\u2026GIF\u30d5\u30a1\u30a4\u30eb\u306e\u30d8\u30c3\u30c0\u3092\u3046\u307e\u304f\u8aad\u3081\u3066\u306a\u3044\u3088\u3046\u3067\u3059\u3002\u30d8\u30c3\u30c0\u3092\u6b63\u3057\u304f\u8aad\u3093\u3067\u3044\u306a\u3044\u306e\u3067\u900f\u904eGIF\u306b\u3082\u5bfe\u5fdc\u3057\u3066\u3044\u306a\u3044\u3068\u3044\u3046\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<blockquote><p><strong><span style=\"font-size: 18pt; color: #ff0000;\">\u3055\u3041\uff5e\u6b21\u3044\u3053\u30fc(\u68d2<\/span><\/strong><\/p><\/blockquote>\n<p>\u3068\u3057\u307e\u3057\u305f\u304c\u3001\u3042\u307e\u308a\u306b\u63a2\u3057\u3066\u898b\u3064\u304b\u3089\u306a\u3044\u306e\u3067\u91cd\u3044\u8170\u3092\u4e0a\u3052\u308b\u3053\u3068\u306b\u3057\u307e\u3057\u305f\u3002\u4eca\u8003\u3048\u308b\u3068\u610f\u5730\u306b\u306a\u3063\u3066\u307e\u3057\u305f\u306dw<\/p>\n<p>GIF\u306e\u30d8\u30c3\u30c0\u306e\u4ed5\u69d8\u66f8\u3092\u8aad\u307f\u306a\u304c\u3089\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u6539\u826f\u3057\u3066\u307f\u307e\u3057\u305f\u3002\u3069\u3046\u3084\u3089Extension\u3092\u6b63\u3057\u304f\u8aad\u3093\u3067\u3044\u306a\u3044\u69d8\u5b50\u3002\u6b63\u3057\u304f\u8aad\u3080\u3088\u3046\u306b\u3057\u3066\u900f\u904eGIF\u3078\u306e\u5bfe\u5fdc\u3092\u3057\u307e\u3057\u305f\u3002\u9577\u3044\u3067\u3059\u304c\u4e0b\u306b\u30b3\u30fc\u30c9\u3092\u5f35\u308a\u307e\u3059<\/p>\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/www.tohoho-web.com\/wwwgif.htm\" data-lkc-id=\"855\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=www.tohoho-web.com\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">www.tohoho-web.com<\/div><div class=\"lkc-share\"> <div class=\"lkc-sns-hb\">3 Users<\/div> <div class=\"lkc-sns-po\">35 Pockets<\/div><\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"https:\/\/s.wordpress.com\/mshots\/v1\/https%3A%2F%2Fwww.tohoho-web.com%2Fwwwgif.htm?w=100\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">GIF\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u8a73\u7d30 - \u3068\u307b\u307b\u306eWWW\u5165\u9580<\/div><div class=\"lkc-url\" title=\"https:\/\/www.tohoho-web.com\/wwwgif.htm\">https:\/\/www.tohoho-web.com\/wwwgif.htm<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<pre class=\"lang:default decode:true \" title=\"gif_modi.h\">    #ifndef __GIF_MODI_H__\r\n    #define __GIF_MODI_H__\r\n\r\n    \/\/typedef void(*gif_draw_pixel_t)(unsigned char r, unsigned char g, unsigned char b);\r\n    typedef void(*gif_draw_pixel_t)(unsigned char r, unsigned char g, unsigned char b , bool trans_gif , bool trans_pixel);\r\n\r\n    typedef struct{\r\n\t    unsigned short SCREEN_WIDTH;\r\n\t    unsigned short SCREEN_HEIGHT;\r\n\t    unsigned char BYTE_5;\r\n\t    unsigned char BACKGROUND;\r\n\t    unsigned char ASPECT_RATIO;\r\n    } SCREEN_DESC;\r\n\r\n    typedef struct{\r\n\t    unsigned short LEFT;\r\n\t    unsigned short UP;\r\n\t    unsigned short IMAGE_WIDTH;\r\n\t    unsigned short IMAGE_HEIGHT;\r\n\t    unsigned char BYTE_9;\r\n    } IMAGE_DESC;\r\n    \r\n\ttypedef struct{\r\n\t\tunsigned char BLOCK_SIZE;    \/\/Block Size(1 Byte) 0x04\u56fa\u5b9a\r\n\t\tunsigned char BYTE_2;        \/\/Reserved(3 Bits),Disposal Mothod(3 Bits),User Input Flag(1 Bit),Transparent Color Flag(1 Bit)\r\n\t\tbool TC_FLAG;                \/\/Transparent Color Flag(1 Bit)\r\n\t\tunsigned short DELAY_TIME;   \/\/Delay Time(2 Bytes)\r\n\t\tunsigned char TC_INDEX;      \/\/Transparent Color Index(1 Byte)\r\n\t} GC_EXTENTION;\r\n\r\n    typedef struct{\r\n\t    unsigned char R;\r\n\t    unsigned char G;\r\n\t    unsigned char B;\r\n    } COLOR;\r\n\r\n    typedef struct{\r\n\t    SCREEN_DESC screenDesc;\r\n\t    IMAGE_DESC imageDesc;\r\n    \tGC_EXTENTION gcExtention;\r\n    } GIF_IMAGE;\r\n\r\n    typedef struct{\r\n\t    unsigned short code;\r\n\t    unsigned short prevCode;\r\n\t    unsigned short nextCode;\r\n    } DICTIONARY_ENTRY;\r\n\r\n    class GIF {\r\n    \t\r\n\t    private:\r\n\t\t    \/\/unsigned char BUFFER[16];\r\n\t\t    unsigned char BUFFER[256];\r\n\t\t    unsigned short PrimaryCodeSize, PrimaryDictSize;\r\n\t\t    unsigned short currentCodeSize, currentDictSize;\r\n\r\n\t\t    unsigned short code, oldcode = 0;\r\n\t\t    unsigned short code1, code2;\r\n\t\t    unsigned short code_CLEAR, code_END;\r\n\r\n\t\t    COLOR g_GlobalColorTable[256];\r\n\r\n\t\t    #define MAX_DICT_SIZE 4098\r\n\t\t    DICTIONARY_ENTRY Dictionary[MAX_DICT_SIZE];\r\n\t\t    unsigned char bitsRemaining;\r\n\t\t    unsigned short getNextCode(void);\r\n\t\t    int checkSignature(char*);\r\n\t\t    File g_fileObject;\r\n\t\t    gif_draw_pixel_t gif_draw_pixel;\r\n\r\n\t\t    int read_file(File, unsigned char *, int);\r\n\t\t    unsigned char read_code;\r\n\r\n\t\t    unsigned char byte5;\r\n\t\t    unsigned char byte9;\r\n\t\t    unsigned char byte2; \/\/ Graphic Control Extension\u7528\u8ffd\u52a0\r\n    \t\r\n    \t\tbool trans_gif; \t\t\t\t\t\/\/gif_draw_pixel\u3078\u306e\u5f15\u304d\u6e21\u3057\u7528\r\n    \t\tunsigned char trans_color_index;\r\n\r\n\t\t    unsigned char currentDataSectionLength;\r\n\r\n\t    public:\r\n\t\t    int init_decoder(File, GIF_IMAGE *);\r\n\t\t    int drawGIFImage(gif_draw_pixel_t);\r\n\t\t    unsigned char counter;\r\n\t\t    void GIFDrawPixel(unsigned char);\r\n\t\t    unsigned short imgWidth, imgHeight;\r\n    };\r\n\r\n#endif<\/pre>\n<pre class=\"lang:default decode:true\" title=\"gif_modi.cpp\">#include &lt;FS.h&gt;\r\n#include \"gif_modi.h\"\r\n\r\nint GIF::init_decoder(File fileObject, GIF_IMAGE * gifImage) {\r\n\tunsigned int i;\r\n\tunsigned char bpp;\r\n\tunsigned short minLZWCodeLength;\r\n\tunsigned int GCT_size;\r\n\r\n\tg_fileObject = fileObject;\r\n\r\n\tfor(int i=0 ; i &lt; 16 ; i++) BUFFER[i] = 0; \/\/\u30d0\u30c3\u30d5\u30a1\u3092\u30ea\u30bb\u30c3\u30c8\u3057\u306a\u3044\u3068\u518d\u5229\u7528\u3067\u304d\u306a\u3044\r\n\t\r\n\t\r\n\t\/\/GIF Header\u306e\u8aad\u307f\u8fbc\u307f\r\n\t\r\n\t\/\/Signature(3 Bytes) + Version(3 Bytes) \"GIF89a\" or \"GIF87a\"\r\n\tread_file(g_fileObject, BUFFER, 6);\r\n\tif (checkSignature((char*)BUFFER) != 1) return -1;\r\n\t\r\n\tread_file(g_fileObject, BUFFER, 7);\r\n\t\r\n\t\/\/Logical Screen Width(2 Bytes)\r\n\t(*gifImage).screenDesc.SCREEN_WIDTH = (BUFFER[1] &lt;&lt; 8) + BUFFER[0];\r\n\t\r\n\t\/\/Logical Screen Height(2 Bytes)\r\n\t(*gifImage).screenDesc.SCREEN_HEIGHT = (BUFFER[3] &lt;&lt; 8) + BUFFER[2];\r\n\r\n\t\/\/Global Color Table Flag(1 Bit),Color Resolution(3 Bits),Sort Flag(1 Bit),Size of Global Color Table(3 Bits)\r\n\t(*gifImage).screenDesc.BYTE_5 = BUFFER[4];\r\n\r\n\t\/\/Background Color Index(1 Byte)\r\n\t(*gifImage).screenDesc.BACKGROUND = BUFFER[5];\r\n\t\r\n\t\/\/Pixel Aspect Ratio(1 Byte)\r\n\t(*gifImage).screenDesc.ASPECT_RATIO = BUFFER[6];\r\n\r\n\tbyte5 = (*gifImage).screenDesc.BYTE_5;\r\n\t\r\n\t\/\/Size of Global Color Table(3 Bits)\r\n\tbpp = (byte5 &amp; 0x07);\r\n\t\/\/2\u306e(Size of Global Color Table)\u4e57\u500b\u306eGlobal Color Table\u304c\u3042\u308b\r\n\tGCT_size = 2 &lt;&lt; bpp;\r\n\r\n\t\/\/Global Color Table Flag(1 Bit)\u304c\u3042\u308b\u306a\u3089\r\n\tif (byte5 &amp; 0x80){\r\n\r\n\t\tfor (i = 0; i &lt; GCT_size; i++){\r\n\t\t\t\/\/1\u3064\u306e\u8272\u60c5\u5831\u306b\u3064\u304dRGB\u306e3\u30d0\u30a4\u30c8\u305a\u3064\u3001GCT_size\u500b\u8aad\u3080\r\n\t\t\tread_file(g_fileObject, BUFFER, 3);\r\n\t\t\tg_GlobalColorTable[i].R = BUFFER[0];\r\n\t\t\tg_GlobalColorTable[i].G = BUFFER[1];\r\n\t\t\tg_GlobalColorTable[i].B = BUFFER[2];\r\n\t\t}\r\n\t}\r\n\telse return -1;\r\n\r\n\t\/\/Image Separator(1B) = 0x2c\u304c\u51fa\u308b\u307e\u3067\u30a8\u30af\u30b9\u30c6\u30f3\u30b7\u30e7\u30f3\u3092\u6b63\u3057\u304f\u8aad\u307f\u98db\u3070\u3059\r\n\tdo {\r\n\t\tread_file(g_fileObject, BUFFER, 1);\r\n\t\t\r\n\t\t\/\/Extension\u30b3\u30fc\u30c9\u304c\u3042\u308b\u306a\u3089\r\n\t\tif (BUFFER[0] == 0x21){\r\n\t\t\tread_file(g_fileObject, BUFFER, 1);\r\n\t\t\t\r\n\t\t\t\/\/Block: Graphic Control Extension\r\n\t\t\tif (BUFFER[0] == 0xf9){\r\n\t\t\t\tread_file(g_fileObject, BUFFER, 6);\r\n\t\t\t\t\r\n\t\t\t\t\/\/Block Size(1 Byte) 0x04 \u56fa\u5b9a\u5024\r\n\t\t\t\t(*gifImage).gcExtention.BLOCK_SIZE = BUFFER[0];\r\n\t\t\t\t\r\n\t\t\t\t\/\/Reserved(3 Bits),Disposal Mothod(3 Bits),User Input Flag(1 Bit),Transparent Color Flag(1 Bit)\r\n\t\t\t\t(*gifImage).gcExtention.BYTE_2 = BUFFER[1];\r\n\t\t\t\tbyte2 = (*gifImage).gcExtention.BYTE_2;\r\n\t\t\t\t\r\n\t\t\t\tif(byte2 &amp; 0x01){\r\n\t\t\t\t\t(*gifImage).gcExtention.TC_FLAG = true;\r\n\t\t\t\t}else{\r\n\t\t\t\t\t(*gifImage).gcExtention.TC_FLAG = false;\r\n\t\t\t\t}\r\n\t\t\t\ttrans_gif = (*gifImage).gcExtention.TC_FLAG;\r\n\t\t\t\t\r\n\t\t\t\t\/\/Delay Time(2 Bytes)\r\n\t\t\t\t(*gifImage).gcExtention.DELAY_TIME = (BUFFER[3] &lt;&lt; 8) + BUFFER[2];\r\n\t\t\t\t\r\n\t\t\t\t\/\/Transparent Color Index(1 Byte)\r\n\t\t\t\t(*gifImage).gcExtention.TC_INDEX = BUFFER[4];\r\n\t\t\t\ttrans_color_index = (*gifImage).gcExtention.TC_INDEX;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t\/\/Block: Comment Extension\r\n\t\t\tif (BUFFER[0] == 0xfe){\r\n\t\t\t\tread_file(g_fileObject, BUFFER, 1);\r\n\t\t\t\t\/\/unsigned char c_size = BUFFER[0];\r\n\t\t\t\t\/\/read_file(g_fileObject, BUFFER, c_size);\r\n\t\t\t\tdo{\r\n\t\t\t\t\tread_file(g_fileObject, BUFFER, 1);\r\n\t\t\t\t} while (BUFFER[0] != 0x00);\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t\/\/Block: Plain Text Extension\r\n\t\t\tif (BUFFER[0] == 0x01){\r\n\t\t\t\tread_file(g_fileObject, BUFFER, 13);\r\n\t\t\t\tread_file(g_fileObject, BUFFER, 1);\r\n\t\t\t\t\/\/unsigned char t_size = BUFFER[0];\r\n\t\t\t\t\/\/read_file(g_fileObject, BUFFER, t_size);\r\n\t\t\t\tdo{\r\n\t\t\t\t\tread_file(g_fileObject, BUFFER, 1);\r\n\t\t\t\t} while (BUFFER[0] != 0x00);\r\n\t\t\t\tcontinue;\r\n\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t\/\/Block: Application Extension\r\n\t\t\tif (BUFFER[0] == 0xff){\r\n\t\t\t\tread_file(g_fileObject, BUFFER, 12);\r\n\t\t\t\tread_file(g_fileObject, BUFFER, 1);\r\n\t\t\t\t\/\/unsigned char a_size = BUFFER[0];\r\n\t\t\t\t\/\/read_file(g_fileObject, BUFFER, a_size);\r\n\t\t\t\tdo{\r\n\t\t\t\t\tread_file(g_fileObject, BUFFER, 1);\r\n\t\t\t\t} while (BUFFER[0] != 0x00);\r\n\t\t\t\tcontinue;\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n\t\t\r\n\t} while (BUFFER[0] != 0x2C);\r\n\r\n\t\r\n\t\/\/Block: Image Block\u306e\u8aad\u307f\u8fbc\u307f\r\n\tread_file(g_fileObject, BUFFER, 11);\r\n\r\n\t\/\/Image Left Position(2 Bytes)\r\n\t(*gifImage).imageDesc.LEFT = (BUFFER[1] &lt;&lt; 8) + BUFFER[0];\r\n\r\n\t\/\/Image Top Position(2 Bytes)\r\n\t(*gifImage).imageDesc.UP = (BUFFER[3] &lt;&lt; 8) + BUFFER[2];\r\n\t\r\n\t\/\/Image Width(2 Bytes)\r\n\t(*gifImage).imageDesc.IMAGE_WIDTH = (BUFFER[5] &lt;&lt; 8) + BUFFER[4];\r\n\t\r\n\t\/\/Image Height(2 Bytes)\r\n\t(*gifImage).imageDesc.IMAGE_HEIGHT = (BUFFER[7] &lt;&lt; 8) + BUFFER[6];\r\n\t\r\n\t\/\/Local Color Table Flag(1 Bit),Interlace Flag(1 Bit),Sort Flag(1 Bit),Reserved[\u672a\u4f7f\u7528](2 Bits),Size of Local Color Table(3 Bits)\r\n\t(*gifImage).imageDesc.BYTE_9 = BUFFER[8];\r\n\r\n\timgWidth = (*gifImage).imageDesc.IMAGE_WIDTH;\r\n\timgHeight = (*gifImage).imageDesc.IMAGE_HEIGHT;\r\n\tbyte9 = (*gifImage).imageDesc.BYTE_9;\r\n\r\n\t\/\/LZW Minimum Code Side(1 Byte)\r\n\tminLZWCodeLength = BUFFER[9] + 1;\r\n\t\r\n\t\/\/Block Size(1 Byte)\r\n\tcurrentDataSectionLength = BUFFER[10];\r\n\r\n\tcode_CLEAR = GCT_size;\r\n\tcode_END = GCT_size + 1;\r\n\tPrimaryDictSize = GCT_size + 2;\r\n\tPrimaryCodeSize = minLZWCodeLength;\r\n\tcurrentCodeSize = minLZWCodeLength;\r\n\r\n\treturn 0;\r\n\r\n}\r\n\r\nint GIF::read_file(File fileObject, unsigned char *buf, int count){\r\n  return fileObject.read(buf,count);\r\n}\r\n\r\nint GIF::drawGIFImage(gif_draw_pixel_t draw_pixel_func){\r\n\tunsigned int i;\r\n\r\n\tgif_draw_pixel = draw_pixel_func;\r\n\tcurrentDictSize = PrimaryDictSize;\r\n\r\n\tcounter = 0;\r\n\r\n\tfor (i = 0; i &lt; MAX_DICT_SIZE; i++)\r\n\t\tDictionary[i].prevCode = Dictionary[i].nextCode = 0;\r\n\r\n\tbitsRemaining = 0;\r\n\r\n\twhile ((code = getNextCode()) != code_END){\r\n\r\n\r\n\t\tif (code == code_CLEAR){\r\n\t\t\tcurrentCodeSize = PrimaryCodeSize;\r\n\t\t\tcurrentDictSize = PrimaryDictSize;\r\n\t\t\toldcode = getNextCode();\r\n\r\n\t\t\tif (oldcode &gt; currentDictSize){\r\n\t\t\t\treturn -3;\r\n\t\t\t}\r\n\t\t\tGIFDrawPixel(oldcode);\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\r\n\t\tif (code &lt; currentDictSize){\r\n\t\t\tcode1 = code;\r\n\t\t\tcode2 = 0;\r\n\r\n\t\t\twhile (code1 &gt;= PrimaryDictSize){\r\n\t\t\t\tDictionary[code1 - PrimaryDictSize].nextCode = code2;\r\n\t\t\t\tcode2 = code1;\r\n\t\t\t\tcode1 = Dictionary[code1 - PrimaryDictSize].prevCode;\r\n\t\t\t\tif (code1 &gt;= code2)\r\n\t\t\t\t\treturn -3;\r\n\t\t\t}\r\n\r\n\t\t\tGIFDrawPixel(code1);\r\n\t\t\twhile (code2 != 0){\r\n\t\t\t\tGIFDrawPixel(Dictionary[code2 - PrimaryDictSize].code);\r\n\t\t\t\tcode2 = Dictionary[code2 - PrimaryDictSize].nextCode;\r\n\t\t\t}\r\n\t\t\tDictionary[currentDictSize - PrimaryDictSize].code = code1;\r\n\t\t\tDictionary[currentDictSize - PrimaryDictSize].prevCode = oldcode;\r\n\t\t\t++currentDictSize;\r\n\r\n\t\t\tif (currentDictSize == MAX_DICT_SIZE) return -2;\r\n\r\n\t\t\tif ((currentDictSize) == (0x0001 &lt;&lt; currentCodeSize))\r\n\t\t\t\t++currentCodeSize;\r\n\t\t\tif (currentCodeSize &gt; 12)\r\n\t\t\t\tcurrentCodeSize = 12;\r\n\r\n\t\t\toldcode = code;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcode1 = oldcode;\r\n\t\t\tcode2 = 0;\r\n\r\n\t\t\twhile (code1 &gt;= PrimaryDictSize){\r\n\t\t\t\tDictionary[code1 - PrimaryDictSize].nextCode = code2;\r\n\t\t\t\tcode2 = code1;\r\n\t\t\t\tcode1 = Dictionary[code1 - PrimaryDictSize].prevCode;\r\n\t\t\t\tif (code1 &gt;= code2)\r\n\t\t\t\t\treturn -3;\r\n\t\t\t}\r\n\r\n\t\t\tGIFDrawPixel(code1);\r\n\t\t\twhile (code2 != 0){\r\n\t\t\t\tGIFDrawPixel(Dictionary[code2 - PrimaryDictSize].code);\r\n\t\t\t\tcode2 = Dictionary[code2 - PrimaryDictSize].nextCode;\r\n\t\t\t}\r\n\t\t\tGIFDrawPixel(code1);\r\n\r\n\t\t\tDictionary[currentDictSize - PrimaryDictSize].code = code1;\r\n\t\t\tDictionary[currentDictSize - PrimaryDictSize].prevCode = oldcode;\r\n\t\t\t++currentDictSize;\r\n\t\t\t\/\/std::cout &lt;&lt; \"dictionary size: \" &lt;&lt; std::dec &lt;&lt; currentDictSize &lt;&lt; std::endl;\r\n\r\n\t\t\tif (currentDictSize == MAX_DICT_SIZE) return -2;\r\n\r\n\r\n\t\t\tif ((currentDictSize) == (0x0001 &lt;&lt; currentCodeSize))\r\n\t\t\t\t++currentCodeSize;\r\n\r\n\t\t\tif (currentCodeSize &gt; 12)\r\n\t\t\t\tcurrentCodeSize = 12;\r\n\r\n\t\t\toldcode = code;\r\n\t\t}\r\n\t}\r\n\treturn 0;\r\n}\r\n\r\n\r\nint GIF::checkSignature(char * IN){\r\n\tchar signature[7];\r\n\tint i;\r\n\r\n\tfor (i = 0; i &lt;= 6; i++)\r\n\t\tsignature[i] = IN[i];\r\n\r\n\tif ((strcmp(signature, \"GIF87a\") == 0) || (strcmp(signature, \"GIF89a\") == 0))\r\n\t\treturn 1;\r\n\telse\r\n\t\treturn 0;\r\n}\r\n\r\nunsigned short GIF::getNextCode(void){\r\n\tunsigned int retval = 0, temp;\r\n\r\n\tif (bitsRemaining &gt;= currentCodeSize){\r\n\t\tretval = (read_code &amp; ((0x01 &lt;&lt; currentCodeSize) - 1));\r\n\t\tread_code &gt;&gt;= currentCodeSize;\r\n\t\tbitsRemaining -= currentCodeSize;\r\n\t}\r\n\telse {\r\n\t\tretval = (read_code &amp; ((0x01 &lt;&lt; bitsRemaining) - 1));\r\n\t\tread_file(g_fileObject, &amp;read_code, 1);\r\n\t\t++counter;\r\n\t\tif (counter == currentDataSectionLength){\r\n\t\t\tcounter = 0;\r\n\t\t\tread_file(g_fileObject, &amp;currentDataSectionLength, 1);\r\n\t\t}\r\n\r\n\t\tif ((currentCodeSize - bitsRemaining) &lt;= 8){\r\n\t\t\ttemp = (read_code &amp; ((0x01 &lt;&lt; (currentCodeSize - bitsRemaining)) - 1));\r\n\t\t\tretval += (temp &lt;&lt; bitsRemaining);\r\n\t\t\tread_code &gt;&gt;= (currentCodeSize - bitsRemaining);\r\n\t\t\tbitsRemaining = 8 - (currentCodeSize - bitsRemaining);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tretval += (read_code &lt;&lt; bitsRemaining);\r\n\t\t\tread_file(g_fileObject, &amp;read_code, 1);\r\n\t\t\t++counter;\r\n\t\t\tif (counter == currentDataSectionLength){\r\n\t\t\t\tcounter = 0;\r\n\t\t\t\tread_file(g_fileObject, &amp;currentDataSectionLength, 1);\r\n\t\t\t}\r\n\t\t\tretval += ((read_code &amp; ((0x01 &lt;&lt; (currentCodeSize - bitsRemaining - 8)) - 1)) &lt;&lt; (bitsRemaining + 8));\r\n\t\t\tread_code &gt;&gt;= (currentCodeSize - bitsRemaining - 8);\r\n\t\t\tbitsRemaining = 8 - (currentCodeSize - bitsRemaining - 8);\r\n\t\t}\r\n\t}\r\n\treturn retval;\r\n}\r\n\r\nvoid GIF::GIFDrawPixel(unsigned char code){\r\n\tCOLOR rgbColor;\r\n\tbool trans_pixel = false;\r\n\r\n\trgbColor = g_GlobalColorTable[code];\r\n\t\r\n\tif(trans_gif &amp;&amp; code == trans_color_index) trans_pixel = true;\r\n\t\r\n\t(*gif_draw_pixel)(rgbColor.R, rgbColor.G, rgbColor.B, trans_gif , trans_pixel);\r\n}<\/pre>\n<p>\u57fa\u672c\u7684\u306b\u4f7f\u3044\u65b9\u306f\u3053\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u7d39\u4ecb\u3057\u3066\u3042\u3063\u305f\u30b5\u30a4\u30c8\u306e\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u3067\u52d5\u304d\u307e\u3059\u304c\u3001\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u95a2\u6570\u304c<\/p>\n<blockquote><p><span style=\"font-size: 14pt;\"><strong>(*gif_draw_pixel)(rgbColor.R, rgbColor.G, rgbColor.B, trans_gif , trans_pixel);<\/strong><\/span><\/p><\/blockquote>\n<p>\u3067\u8fd4\u3063\u3066\u304d\u307e\u3059\u306e\u3067\u4fee\u6b63\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30c7\u30b3\u30fc\u30c9\u3057\u305f\u30d4\u30af\u30bb\u30eb\u6bce\u306b\u547c\u3073\u51fa\u3055\u308c\u307e\u3059\u3002trans_gif\u306f\u900f\u904eGIF\u30d5\u30a1\u30a4\u30eb\u304b\u3069\u3046\u304b\u3001tens_pixel\u306f\u900f\u904e\u30d4\u30af\u30bb\u30eb\u304b\u3069\u3046\u304b\u3068\u3044\u3046\u5909\u6570\u3092\u52a0\u3048\u3066\u3044\u307e\u3059\u306e\u3067\u900f\u904e\u51e6\u7406\u3082\u53ef\u80fd\u3068\u306a\u308a\u307e\u3059\u3002\u3053\u308c\u3067\u6b63\u3057\u304f\u30c7\u30b3\u30fc\u30c9\u306f\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n<p>\u4f59\u8ac7\u3067\u3059\u304c\u3001\u6c4e\u7528\u6027\u30fb\u4e92\u63db\u6027\u306e\u70ba\u3001\u3053\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3082\u30a4\u30cb\u30b7\u30e3\u30e9\u30a4\u30ba\u6642\u306b\u30d5\u30a1\u30a4\u30eb\u30b9\u30c8\u30ea\u30fc\u30e0\u3092\u6e21\u3057\u3066\u521d\u671f\u5316\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u5f37\u9707\u30e2\u30cb\u30bf\u3092\u4f5c\u308b\u4e0a\u3067\u753b\u50cf\u751f\u6210\u306e\u6d41\u308c\u7684\u306b<\/p>\n<ol>\n<li><strong><span style=\"font-size: 14pt; color: #993366;\">GIF\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9<\/span><\/strong><\/li>\n<li><strong><span style=\"font-size: 14pt; color: #993366;\">GIF\u30c7\u30b3\u30fc\u30c9<\/span><\/strong><\/li>\n<li><strong><span style=\"font-size: 14pt; color: #993366;\">\u753b\u50cf\u51e6\u7406&amp;\u5408\u6210<\/span><\/strong><\/li>\n<li><strong><span style=\"font-size: 14pt; color: #993366;\">TFT\u51fa\u529b<\/span><\/strong><\/li>\n<\/ol>\n<p>\u306e\u30b9\u30c6\u30c3\u30d7\u3092\u60f3\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002\u7d50\u69cb\u306a\u30e1\u30e2\u30ea\u304c\u5fc5\u8981\u3067\u3059\u306e\u3067\u3001PSRAM\u304c\u3042\u308bESP32-wrover\u30b7\u30ea\u30fc\u30ba\u304c\u5fc5\u9808\u3068\u3044\u3048\u307e\u3059\u3002\u3053\u306e\u5834\u5408\u306f\u3001GIF\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u30e1\u30e2\u30ea\u9818\u57df\u3054\u3068\u30c7\u30b3\u30fc\u30c0\u306b\u6e21\u305b\u308b\u3088\u3046\u306b\u3057\u305f\u65b9\u304c\u4fbf\u5229\u306a\u306e\u3067\u5b9f\u969b\u306f\u305d\u3061\u3089\u306e\u65b9\u3067\u5b9f\u88c5\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"lang:default decode:true \">int GIF_MEM::init_decoder(uint8_t * gif, GIF_IMAGE * gifImage) { -\u7565- }\r\n\r\n- \u7565 -\r\n\r\n\/*\r\nint GIF_MEM::read_file(File fileObject, unsigned char *buf, int count){\r\n  return fileObject.read(buf,count);\r\n}\r\n*\/\r\nint GIF_MEM::read_file(uint8_t * gif, unsigned char *buf, int count){\r\n  \r\n\tfor(int i=0;i &lt; count ; i++){\r\n\t\tbuf[i] = gif[gif_file_pos];\r\n\t\tgif_file_pos++;\r\n\t}\r\n\treturn 1;\r\n}<\/pre>\n<p>\u91cd\u8907\u3059\u308b\u306e\u3067\u5168\u63b2\u8f09\u306f\u907f\u3051\u307e\u3059\u304c\u3001\u4e0a\u306e\u3088\u3046\u306a\u611f\u3058\u3067\u5909\u66f4\u3057\u307e\u3059\u3002gif\u306fGIF\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305fPSRAM\u4e0a\u306e\u30d0\u30c3\u30d5\u30a1\u3092\u60f3\u5b9a\u3057\u3066\u307e\u3059\u3002\u3053\u3046\u3059\u308c\u3070SPIFFS\u3084SD\u30ab\u30fc\u30c9\u4e0d\u8981\u3067PSRAM\u4e0a\u3067\u51e6\u7406\u3092\u5b8c\u9042\u3067\u304d\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u307e\u305a\u2026\u306a\u305cGIF\u306a\u306e\u304b? \u300cesp32\u3068TFT\u6db2\u6676\u3067\u5f37\u9707\u30e2\u30cb\u30bf\u3092\u4f5c\u308a\u305f\u3044\u300d \u3092\u524d\u63d0\u306b\u8272\u3005\u8a66\u884c\u932f\u8aa4\u3057\u3066\u3044\u307e\u3059\u3002\u524d\u306eTTS\u306e\u8a18\u4e8b\u3082\u305d\u306e\u4e00\u74b0\u3067\u3059\u3002\u5f37\u9707\u30e2\u30cb\u30bf\u3068\u306f\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u7dca\u6025\u5730\u9707\u901f\u5831(\u4e88\u5831\u3082\u542b\u3081\u308b)\u3092\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u30a2\u30ec\u3067 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3852,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"ja","_original_post":"https:\/\/androiphone.uvs.jp\/?p=3848","footnotes":""},"categories":[163,168],"tags":[],"class_list":["post-3848","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-esp32","category-gif","ja"],"_links":{"self":[{"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=\/wp\/v2\/posts\/3848","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3848"}],"version-history":[{"count":13,"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=\/wp\/v2\/posts\/3848\/revisions"}],"predecessor-version":[{"id":3863,"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=\/wp\/v2\/posts\/3848\/revisions\/3863"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=\/wp\/v2\/media\/3852"}],"wp:attachment":[{"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3848"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3848"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3848"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}