質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ウィンドウ

コンピューター用語において、ウィンドウとはユーザとプログラムのやり取りを可能にするGUIの枠組みのことをいいます。

Q&A

解決済

2回答

2172閲覧

C言語でウィンドウ表示されたものを画像保存経由せずに0と1で配列表現したい。(もしくはウインドウ画素情報の取得方法)

dendenmushi

総合スコア98

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ウィンドウ

コンピューター用語において、ウィンドウとはユーザとプログラムのやり取りを可能にするGUIの枠組みのことをいいます。

0グッド

0クリップ

投稿2021/05/03 03:11

編集2021/05/04 06:06

前提・実現したいこと

現在windows10の環境でコマンドプロンプトにてgccを利用しC言語プログラムを行っております。
内容は、ウィンドウに表示されたものを、画像保存(BITMAP保存)を経由せずに、0と1で配列表現しようと思っております。

イメージとしては以下です。
(説明)
左のひよこ画像・・・PCに表示されている背景です。
右のひよこ・・・ウィンドウアプリで一定の範囲を映し出しています。

イメージ説明
↓こちらを01表現に変える。
イメージ説明

該当のソースコード

hiyoko_analysis.c

c

1#include <stdio.h> 2#include <windows.h> 3#define WINDOWS_CLASS_NAME TEXT("WisdomSoft.Sample.Window") 4 5LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); // ウインドウプロシージャ関数 6ATOM InitApp(HINSTANCE); 7BOOL InitInstance(HINSTANCE,int); 8char szClassName[]="sample"; //ウインドウクラス 9 10HINSTANCE hInst; 11int ncshow; 12HWND hWnd; 13 14int WINAPI WinMain(HINSTANCE hCurInst,HINSTANCE hPrevInst, 15 LPSTR lpsCmdLine,int nCmdShow ){ 16 MSG msg; 17 BOOL bRet; 18 hInst = hCurInst; 19 ncshow = nCmdShow; 20 if(!InitApp(hInst)) return FALSE; 21 if(!InitInstance(hCurInst,ncshow)) return FALSE; 22 23 while((bRet = GetMessage(&msg,NULL,0,0)) != 0){ 24 if(bRet == -1){ 25 MessageBox(NULL,"GetMessage ERR","Error",MB_OK); 26 break; 27 }else{ 28 TranslateMessage(&msg); 29 DispatchMessage(&msg); 30 //} 31 } 32 } 33 return (int)msg.wParam; 34} 35 36//ウインドウクラスの登録 37ATOM InitApp(HINSTANCE hInst){ 38 WNDCLASSEX wc; 39 wc.cbSize = sizeof(WNDCLASSEX); 40 wc.style =CS_HREDRAW | CS_VREDRAW; 41 wc.lpfnWndProc = WndProc;//プロ―ジャー名 42 wc.cbClsExtra = 0; 43 wc.cbWndExtra = 0; 44 wc.hInstance = hInst;//インスタンス 45 wc.hIcon = (HICON)LoadImage(NULL, 46 MAKEINTRESOURCE(IDI_APPLICATION), 47 IMAGE_ICON, 48 0, 49 0, 50 LR_DEFAULTSIZE | LR_SHARED); 51 wc.hCursor = (HCURSOR)LoadImage(NULL, 52 MAKEINTRESOURCE(IDC_ARROW), 53 IMAGE_CURSOR, 54 0, 55 0, 56 LR_DEFAULTSIZE | LR_SHARED); 57 wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 58 wc.lpszMenuName = NULL; //メニュー名 59 wc.lpszClassName = (LPCSTR)szClassName; 60 wc.hIconSm = (HICON)LoadImage(NULL, 61 MAKEINTRESOURCE(IDI_APPLICATION), 62 IMAGE_ICON, 63 0, 64 0, 65 LR_DEFAULTSIZE | LR_SHARED); 66 return (RegisterClassEx(&wc)); 67} 68 69 70//ウインドウの生成 71BOOL InitInstance(HINSTANCE hInst,int nCmdShow) 72{ 73 74 hWnd = CreateWindow(szClassName, 75 "title bar name", 76 WS_OVERLAPPEDWINDOW,//ウインドウの種類 77 1000, //x座標 78 600, //y座標 79 400, //幅 80 300, //高さ 81 NULL, //親ウインドウのハンドル、親を作るときは NULL 82 NULL, //メニューハンドル、クラスメニューを使うときは NULL 83 hInst, //インスタンスハンドル 84 NULL); 85 if(!hWnd) return FALSE; 86 ShowWindow(hWnd,nCmdShow); 87 UpdateWindow(hWnd); 88 return TRUE; 89} 90 91 92void paint(HWND hWnd){ 93 94 PAINTSTRUCT ps; 95 HDC hdc = BeginPaint(hWnd,&ps); 96 97 RECT rc; 98 GetClientRect(hWnd,&rc);//ウインドウの範囲を取得 99 100 BitBlt(hdc, rc.left, rc.top, 200, 200, CreateDC(TEXT("DISPLAY") , NULL , NULL , NULL), 400, 350, SRCCOPY); 101 printf("hWnd %d\n", hWnd); 102 EndPaint(hWnd,&ps); 103} 104 105//ウィンドウプロシージャ 106LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp) 107{ 108 int id; 109 HDC hdc; 110 HBRUSH hBrush; 111 PAINTSTRUCT ps; 112 113 switch(msg){ 114 case WM_CREATE: 115 SetLayeredWindowAttributes(hWnd, RGB(255, 0, 0), 0, LWA_COLORKEY); 116 SetTimer(hWnd,1000,500,NULL); 117 break; 118 case WM_PAINT: 119 paint(hWnd); 120 break; 121 122 case WM_TIMER: 123 if(wp == 1000){ 124 //再描画要求 125 InvalidateRect(hWnd, NULL,1); 126 UpdateWindow(hWnd); 127 } 128 else return (DefWindowProc(hWnd,msg,wp,lp)); 129 break; 130 131 case WM_CLOSE: 132 id = MessageBox(hWnd, 133 "終了してもよろしいですか", 134 "確認", 135 MB_YESNO | MB_ICONQUESTION); 136 if (id == IDYES) 137 KillTimer(hWnd,1000);//タイマーを破棄 138 DestroyWindow(hWnd); 139 break; 140 141 case WM_DESTROY: 142 PostQuitMessage(0); 143 break; 144 default: 145 return (DefWindowProc(hWnd,msg,wp,lp)); 146 } 147 return 0; 148} 149 150int main( void ) 151{ 152 return WinMain(GetModuleHandle(NULL), NULL, NULL, SW_SHOWDEFAULT); 153}

いわゆる画像のディジタル化。標本化からの量子化といっていいのでしょうか。
今、対象の場所をウィンドウに映し出すことところまでできました。

発生している問題・エラーメッセージ

ただ、これを0と1で表現する際に、一度画像に変換して(bitmap保存等)からその画像を0と1へ変換する方法もあると思うのですが、ローカルに画像保存をしますとスピードやPCへの負荷や削除する手間があるため、今ウィンドウに表示されているそのものを使用して01変換表示する方法はないのでしょうか。

試したこと

◇試したこと1:ペイント関数時にデータ状態確認

c

1void paint(HWND hWnd){ 2 3 PAINTSTRUCT ps; 4 HDC hdc = BeginPaint(hWnd,&ps); 5 printf("hdc %d\n", hdc); 6 printf("ps %d\n", ps); 7 8 9 RECT rc; 10 GetClientRect(hWnd,&rc);//ウインドウの範囲を取得 11 printf("rc %d\n", rc); 12 13 BitBlt(hdc, rc.left, rc.top, 200, 200, CreateDC(TEXT("DISPLAY") , NULL , NULL , NULL), 400, 350, SRCCOPY); 14 printf("hWnd %d\n", hWnd); 15 EndPaint(hWnd,&ps); 16} 17

イメージ説明
数値ばかりで配列らしきものがありませんでした。

◇試したこと2:ウインドウを構成する要素を調べるため、システムの情報を得るGetSystemMetrics()の利用

SM_CXBORDERでウインドウの幅などの情報は得られますが、表示されている画素の情報は得られませんでした。

◇試したこと3:(試せていないこと)メモリデバイスコンテキストから情報を得る
DDBを作るサイト
方向性のみ。

◇試したこと4:BITMAP構造体からピクセル画素を得る

BITMAP構造体から情報取得
上記サイトからメモリデバイスコンテキストなどについて学び画素などの情報を得ようと試みました。

c

1 // 追加2行 2 LPBYTE lp1; 3 BITMAP bm; 4 5 BitBlt(hdc, rc.left, rc.top, 200, 200, CreateDC(TEXT("DISPLAY") , NULL , NULL , NULL), 400, 350, SRCCOPY); 6 7 // 追加3行 8 GetObject(hdc, (int)sizeof(BITMAP), &bm); 9 lp1 = (LPBYTE)bm.bmBits; 10 printf("lp1[0] %d\n", lp1[0]); 11 12 printf("hWnd %d\n", hWnd); 13 EndPaint(hWnd,&ps);

元のソースコードの100行目あたりに上記のコードに変更してみました。
追加で2行と3行と記載されている箇所です。
結果的には、
イメージ説明
先頭のピクセルの画素(赤色?)を取得できているようですが、暫くするとフリーズしてしまいました。

なぜ止まってしまうのでしょうか。メモリ解放などの理由からでしょうか。

いろいろ参考書やサイトで調べているのですが、どれも保存をして読み込んでからという処理ばかりでした。
言い換えれば、ウィンドウの画素の情報を取得さえできれば、あとは閾値を決めて01変換できます。ウィンドウの画素数の情報取得するAPIや何かよい方法はないか思案しております。

リアルタイムに素早く映し出している画を01変換表示する方法として標本化量子化などを毎回計算するよりも、画像を一度保存してからそこから変換が早いなど他の方法でも構いません。何かアドバイス頂けないでしょうか。
よろしくお願い致します。

補足情報(FW/ツールのバージョンなど)

OS:windows10
言語:c
コンパイラ:gcc

2021/5/4 追記

デスクトップをCreateDIBSectionを使用しHBITMAP型の返却値を取得し、デスクトップ画の情報を反映させ、hbmpPrevに情報反映しましたが、その後のメモリアクセスとRGM色情報の取得で詰まっております。このあとにアクセスする方法のアドバイス頂けないでしょうか。よろしくお願い致します。

c

1#include <windows.h> 2#include <stdio.h> 3void DrawCursor(HDC hdc); 4BOOL WriteBitmap(LPTSTR lpszFileName, int nWidth, int nHeight, LPVOID lpBits); 5HBITMAP CreateBackbuffer(int nWidth, int nHeight); 6 7int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpszCmdLine, int nCmdShow) 8{ 9 HDC hdc; 10 HWND hwndDesk; 11 RECT rc; 12 BITMAP bm; 13 HBITMAP hbmp; 14 HBITMAP hbmpPrev; 15 16 hwndDesk = GetDesktopWindow(); 17 GetWindowRect(hwndDesk, &rc); 18 19 hdc = CreateCompatibleDC(NULL); 20 21 // CreateDIBSectionで作成したビットマップは直接ピクセルデータにアクセス出来るポインタが使用出来る 22 hbmp = CreateBackbuffer(rc.right, rc.bottom); 23 24 BITMAP i; 25 hbmpPrev = (HBITMAP)SelectObject(hdc, hbmp); 26 //printf("%d\n", hbmpPrev[0]); 27 28 29 // ピクセルデータを取得したいイメージをBitBltで転送して取り出せばよい 30 BitBlt(hdc, 0, 0, rc.right, rc.bottom, GetWindowDC(hwndDesk), 0, 0, SRCCOPY); 31 DrawCursor(hdc); 32 33 GetObject(hbmp, sizeof(BITMAP), &bm); 34 if (WriteBitmap(TEXT("capture.bmp"), rc.right, rc.bottom, bm.bmBits)) 35 MessageBox(NULL, TEXT("ファイルを作成しました。"), TEXT("OK"), MB_OK); 36 else 37 MessageBox(NULL, TEXT("ファイルの作成に失敗しました。"), NULL, MB_ICONWARNING); 38 // DIBセクションのHBITMAPをSelectObjectしたメモリDCを転送先にしてBitBltしたら、作成時に受け取ったポインタにピクセルデータが格納 39 SelectObject(hdc, hbmpPrev); 40 DeleteObject(hbmp); 41 DeleteDC(hdc); 42 43 return 0; 44} 45 46void DrawCursor(HDC hdc) 47{ 48 int x, y; 49 CURSORINFO cursorInfo; 50 ICONINFO iconInfo; 51 52 cursorInfo.cbSize = sizeof(CURSORINFO); 53 GetCursorInfo(&cursorInfo); 54 55 GetIconInfo(cursorInfo.hCursor, &iconInfo); 56 57 x = cursorInfo.ptScreenPos.x - iconInfo.xHotspot; 58 y = cursorInfo.ptScreenPos.y - iconInfo.yHotspot; 59 DrawIcon(hdc, x, y, cursorInfo.hCursor); 60} 61 62BOOL WriteBitmap(LPTSTR lpszFileName, int nWidth, int nHeight, LPVOID lpBits) 63{ 64 HANDLE hFile; 65 DWORD dwResult; 66 DWORD dwSizeImage; 67 BITMAPFILEHEADER bmfHeader; 68 BITMAPINFOHEADER bmiHeader; 69 70 hFile = CreateFile(lpszFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 71 if (hFile == INVALID_HANDLE_VALUE) 72 return FALSE; 73 74 dwSizeImage = nHeight * ((3 * nWidth + 3) / 4) * 4; 75 76 ZeroMemory(&bmfHeader, sizeof(BITMAPFILEHEADER)); 77 bmfHeader.bfType = *(LPWORD)"BM"; 78 bmfHeader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + dwSizeImage; 79 bmfHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); 80 81 WriteFile(hFile, &bmfHeader, sizeof(BITMAPFILEHEADER), &dwResult, NULL); 82 83 ZeroMemory(&bmiHeader, sizeof(BITMAPINFOHEADER)); 84 bmiHeader.biSize = sizeof(BITMAPINFOHEADER); 85 bmiHeader.biWidth = nWidth; 86 bmiHeader.biHeight = nHeight; 87 bmiHeader.biPlanes = 1; 88 bmiHeader.biBitCount = 24; 89 bmiHeader.biSizeImage = dwSizeImage; 90 bmiHeader.biCompression = BI_RGB; 91 92 WriteFile(hFile, &bmiHeader, sizeof(BITMAPINFOHEADER), &dwResult, NULL); 93 94 WriteFile(hFile, lpBits, dwSizeImage, &dwResult, NULL); 95 96 CloseHandle(hFile); 97 98 return TRUE; 99} 100 101HBITMAP CreateBackbuffer(int nWidth, int nHeight) 102{ 103 LPVOID lp; 104 BITMAPINFO bmi; 105 BITMAPINFOHEADER bmiHeader; 106 107 ZeroMemory(&bmiHeader, sizeof(BITMAPINFOHEADER)); 108 bmiHeader.biSize = sizeof(BITMAPINFOHEADER); 109 bmiHeader.biWidth = nWidth; 110 bmiHeader.biHeight = nHeight; 111 bmiHeader.biPlanes = 1; 112 bmiHeader.biBitCount = 24; 113 114 bmi.bmiHeader = bmiHeader; 115 116 return CreateDIBSection(NULL, (LPBITMAPINFO)&bmi, DIB_RGB_COLORS, &lp, NULL, 0); 117}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

CreateDIBSectionで作成したビットマップは直接ピクセルデータにアクセス出来るポインタが使用出来るので、ピクセルデータを取得したいイメージをBitBltで転送して取り出せばよいと思います。他には、GetDIBitsというAPIもありますが。

スクリーンキャプチャ - EternalWindows

投稿2021/05/03 06:13

編集2021/05/03 06:15
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dendenmushi

2021/05/04 01:39

すみません教えて下さい。 >BitBltで転送して取り出せばよい こちらなのですが、 CreateDIBSection(NULL, (LPBITMAPINFO)&bmi, DIB_RGB_COLORS, &lp, NULL, 0); このメソッドを使い返却ができました。しかし、 BitBlt(hdc, 0, 0, rc.right, rc.bottom, GetWindowDC(hwndDesk), 0, 0, SRCCOPY); (hwndDeskはデスクトップの表示情報です。) 転送した先のhdcを使い、そこからポインタ情報から色情報を取り出すという意味でしょうか。それとも、実際にBMPイメージを作成後にそちらを読み込んでから座標ごとの色情報を取り出すという意味でしたでしょうか。 よろしくお願い致します。
退会済みユーザー

退会済みユーザー

2021/05/04 03:03 編集

> 転送した先のhdcを使い、そこからポインタ情報から色情報を取り出すという意味でしょうか そうです。DIBセクションのHBITMAPをSelectObjectしたメモリDCを転送先にしてBitBltしたら、作成時に受け取ったポインタにピクセルデータが格納されています。
dendenmushi

2021/05/04 05:29 編集

回答ありがとうございます。どうしてもポインタへのアクセスと色情報取得までができず、こちら別質問で立てますのでもしよろしければそちらで回答頂けないでしょうか。すぐに投稿します。ebisteme様の方で回答されているGetPixelは容易に取り出せましたが、全画素をを何枚も画像をチェックするとなった場合、ポインタを利用する方がスピードは速くなるのでしょうか。
退会済みユーザー

退会済みユーザー

2021/05/04 05:33 編集

> どうしてもポインタへのアクセスと色情報取得までができず リンク先のサンプルが動作しないということでしょうか? > 画素をを何枚も画像をチェックするとなった場合、ポインタを利用する方がスピードは速くなるのでしょうか 速度は圧倒的にDIBセクションでポインタ直アクセスした方が早いです。
dendenmushi

2021/05/04 05:59 編集

>リンク先のサンプルが動作しないということでしょうか? 私が壮大な勘違いをしていたらすみません。本文へコード追記します。 >速度は圧倒的にDIBセクションでポインタ直アクセスした方が早いです。 ありがとうございます。
退会済みユーザー

退会済みユーザー

2021/05/04 06:20 編集

WriteBitmapの処理でまさにピクセルデータを直接ファイルに出力している部分がありますが、 これ→WriteFile(hFile, lpBits, dwSizeImage, &dwResult, NULL); ピクセル値を確認したいのであれば、lpBitsをBYTE*等にキャストしてアクセスすればよいと思います。
dendenmushi

2021/05/04 08:41

>lpBitsをBYTE*等にキャストしてアクセスすればよいと思います。 ありがとうございます。度々すみません。アクセスし数値取得に成功したのですが、これはRGBでいう色情報ということになるのでしょうか。 WriteFile(hFile, lpBits, dwSizeImage, &dwResult, NULL); BYTE* lpbits_byte; lpbits_byte = (BYTE*)lpBits; printf("lpbits_byte[0] %d\n", lpbits_byte[0]); printf("lpbits_byte[1] %d\n", lpbits_byte[1]); printf("lpbits_byte[2] %d\n", lpbits_byte[2]); printf("lpbits_byte[3] %d\n", lpbits_byte[3]); 結果は、以下でした。 lpbits_byte[0] 66 lpbits_byte[1] 57 lpbits_byte[2] 35 lpbits_byte[3] 66
退会済みユーザー

退会済みユーザー

2021/05/04 09:20 編集

そうなります。 後は小さいBMPファイル作って実際のBMPデータをバイナリエディタで確認して取り出したバイトデータと比較したりしてデバッグしたり、BMPファイルフォーマットの仕様を検索したりして知識を深めてください。1から10まで全て説明するつもりはありません。
dendenmushi

2021/05/04 09:44

教授頂きありがとうございました。
guest

0

とある点の画素情報が欲しいなら、GetPixelで指定したpixelのRGB値が得られますが。

投稿2021/05/03 03:27

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dendenmushi

2021/05/04 00:36 編集

ありがとうございます。頂いた情報で試そうと思っているのですが、即座にコードに反映できず、非常に奥深い周辺知識が必要なのだと推察しています。少し時間をかけて言われている意味を解釈して実装を試みてみます。
dendenmushi

2021/05/04 02:15 編集

仕様確認などしたところ返却型がCOLORREF で割と簡単に取得できるのかと思いましたが、返却値確認でつまづいております。 ①(失敗) COLORREF r, g, b; BitBlt(hdc, rc.left, rc.top, 200, 200, CreateDC(TEXT("DISPLAY") , NULL , NULL , NULL), 400, 350, SRCCOPY); printf("pixel_info %d\n", GetPixel(hdc, 55, 55).r); printf("pixel_info %d\n", GetPixel(hdc, 55, 55)[0]); ===================== ②(失敗) COLORREF rgbColor = RGB( Red, Green, Blue ); BitBlt(hdc, rc.left, rc.top, 200, 200, CreateDC(TEXT("DISPLAY") , NULL , NULL , NULL), 400, 350, SRCCOPY); rgbColor = GetPixel(hdc, 55, 55) printf("pixel_info %d\n", rgbColor); ======================== ③(失敗) int Red; int Green; int Blue; COLORREF rgbColor = RGB(Red,Green,Blue); BitBlt(hdc, rc.left, rc.top, 200, 200, CreateDC(TEXT("DISPLAY") , NULL , NULL , NULL), 400, 350, SRCCOPY); rgbColor = GetPixel(hdc, 55, 55); printf("rgbColor %d\n", rgbColor); r,g,bで色情報を取得できると思うのですが、この際の中身の確認方法を教えて頂けないでしょうか。
episteme

2021/05/04 03:26

Green = GetGValue(rgbColor); # 同様に GetBValue/GetRValue
dodox86

2021/05/04 03:43

GetXXValue()について、現時点のマイクロソフトのリファレンス、間違っていますね。 void GetBValue(rgb); とあります。まったく困ったことです。 GetBValue macro (wingdi.h) https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-getbvalue 実際にはwingdi.hでは #define GetRValue(rgb) (LOBYTE(rgb)) #define GetGValue(rgb) (LOBYTE(((WORD)(rgb)) >> 8)) #define GetBValue(rgb) (LOBYTE((rgb)>>16)) 当然(?)、BYTEです。
dendenmushi

2021/05/04 05:30

episteme様 回答ありがとうございました。Pixelを抽出することに成功しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問