OSDN Git Service

SDL_CreateRGBSurfaceFrom サンプルコードを追加 https://wiki.libsdl.org/SDL_CreateRGBSurfaceFrom...
authormaruhiro <maruhiro@bridge.ocn.ne.jp>
Mon, 17 Oct 2016 15:17:11 +0000 (00:17 +0900)
committermaruhiro <maruhiro@bridge.ocn.ne.jp>
Mon, 17 Oct 2016 15:17:11 +0000 (00:17 +0900)
SDL_CreateRGBSurfaceFrom.html

index 42a4ed7..89f20c2 100644 (file)
 <h2>\96ß\82è\92l</h2>\r
 \90¬\8c÷\82Ì\82Æ\82«\90\90¬\82³\82ê\82½<a href="SDL_Surface.html">SDL_Surface</a>, \8e¸\94s\82Ì\82Æ\82«NULL\82ð\96ß\82·.\r
 <a href="SDL_GetError.html">SDL_GetError()</a>\82ð\8cÄ\82ñ\82Å\8fÚ\8d×\82ð\92m\82é\82±\82Æ\82ª\82Å\82«\82é.\r
+<h2>\83T\83\93\83v\83\8b\83R\81[\83h</h2>\r
+<p>\r
+<code>\r
+<pre>\r
+// stb_image.h\82ð\8eg\82Á\82Ä\93Ç\82Ý\8d\9e\82ñ\82¾\89æ\91\9c\83t\83@\83C\83\8b\82©\82çSDL_Surface*\82ð\90\90¬\82·\82é\83T\83\93\83v\83\8b\r
+// (https://github.com/nothings/stb/)\r
+\r
+// stb_image\82É\97v\8b\81\82·\82é\8fo\97Í\82Ì\83J\83\89\81[\8c`\8e®\r
+// \83¿\83`\83\83\83l\83\8b\82ð\8b\81\82ß\82È\82¢/\95K\97v\82È\82¢\82È\82ç\82ÎSTBI_rgb\82ð\8eg\82¤\82±\82Æ\r
+int req_format = STBI_rgb_alpha; \r
+int width, height, orig_format;\r
+unsigned char* data = stbi_load("./test.png", &width, &height, &orig_format, req_format);\r
+if(data == NULL) {\r
+        fprintf(stderr, "\89æ\91\9c\83t\83@\83C\83\8b\82Ì\93Ç\82Ý\8d\9e\82Ý\82É\8e¸\94s\82µ\82½: %s\n", stbi_failure_reason());\r
+        exit(1);\r
+}\r
+\r
+// RGB(A)\83o\83C\83g\94z\97ñ\82Ì\82½\82ß\82Ì\83s\83N\83Z\83\8b\8c`\8e®\82Ì\83J\83\89\81[\83}\83X\83N\82ð\90Ý\92è\82·\82é\r
+// \82±\82ê\82ÍSTBI_rgb (3)\82ÆSTBI_rgb_alpha (4)\82Ì\82Ý\91Î\89\9e\82µ\82Ä\82¢\82é!\r
+Uint32 rmask, gmask, bmask, amask;\r
+#if SDL_BYTEORDER == SDL_BIG_ENDIAN\r
+  int shift = (req_format == STBI_rgb) ? 8 : 0;\r
+  rmask = 0xff000000 >> shift;\r
+  gmask = 0x00ff0000 >> shift;\r
+  bmask = 0x0000ff00 >> shift;\r
+  amask = 0x000000ff >> shift;\r
+#else // little endian, like x86\r
+  rmask = 0x000000ff;\r
+  gmask = 0x0000ff00;\r
+  bmask = 0x00ff0000;\r
+  amask = (req_format == STBI_rgb) ? 0 : 0xff000000;\r
+#endif\r
+\r
+int depth, pitch;\r
+if(req_format == STBI_rgb) {\r
+        depth = 24;\r
+        pitch = 3*width; // 1\83s\83N\83Z\83\8b\82 \82½\82è3byte * 1\8ds\82Ì\83s\83N\83Z\83\8b\90\94\r
+} else { // STBI_rgb_alpha (RGBA)\r
+        depth = 32;\r
+        pitch = 4*width;\r
+}\r
+\r
+SDL_Surface* surf = SDL_CreateRGBSurfaceFrom((void*)data, width, height, depth, pitch,\r
+                                             rmask, gmask, bmask, amask);\r
+\r
+if(surf == NULL) {\r
+        fprintf(stderr, "\83T\81[\83t\83F\83C\83X\82Ì\90\90¬\82É\8e¸\94s\82µ\82½: %s\n", SDL_GetError());\r
+        stbi_image_free(data);\r
+        exit(1);\r
+}\r
+\r
+// ... \82±\82±\82Å\83T\81[\83t\83F\83C\83X\82ð\8eg\82¤ ...\r
+// ...\r
+\r
+// \83T\81[\83t\83F\83C\83X\82ª\95K\97v\82È\82­\82È\82Á\82½\82ç\89ð\95ú\82·\82é...\r
+SDL_FreeSurface(surf);\r
+// .. *\82»\82µ\82Ä* \83T\81[\83t\83F\83C\83X\82Å\8eg\82Á\82½\83f\81[\83^\82à!\r
+stbi_image_free(data);\r
+</pre>\r
+</code>\r
+</p>\r
 <h2>\8fÚ\8d×</h2>\r
 <p>\r
 depth\82ª4\82Ü\82½\82Í8\82Ì\82Æ\82«, \8bó\82Ì\83p\83\8c\83b\83g\82ª\90\90¬\82³\82ê\82é.\r