質問するログイン新規登録

質問編集履歴

1

画像とコードの誤りを直したことと試したことを書きました。

2021/09/07 11:30

投稿

A_.1
A_.1

スコア6

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- 私はDrawTextExでアイコンを表示させたのですが、画質がとても悪すぎます。
1
+ 私はDrawIconExでアイコンを表示させたのですが、画質がとても悪すぎます。
2
2
  ```C
3
3
  #include <windows.h>
4
4
 
@@ -24,7 +24,7 @@
24
24
  int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
25
25
  PSTR lpCmdLine , int nCmdShow ) {
26
26
  HWND hwnd;
27
- HBRUSH hBrush = CreateSolidBrush(RGB(0,0,0));
27
+ HBRUSH hBrush = CreateSolidBrush(RGB(255,255,255));
28
28
  WNDCLASS winc;
29
29
  MSG msg;
30
30
  winc.style = CS_HREDRAW | CS_VREDRAW;
@@ -57,4 +57,92 @@
57
57
 
58
58
  なにか解決策がないか教えてほしいです。
59
59
 
60
- 環境は、MinGW-win32でコンパイル方法は、gcc -mwindows test.c test.oです。
60
+ 環境は、MinGW-win32でコンパイル方法は、gcc -mwindows test.c test.oです。
61
+
62
+ 表示させたい画像
63
+ ![画像](9f56e51ecf0b68ef776e39b978b8a6a2.png)
64
+
65
+ でも実行すると、
66
+ ![画像](40f6cf53a9442be0be2881d84bfe5c0c.png)
67
+ こうなります。
68
+
69
+ 試したこと
70
+ BITMAPを使おうと思いましたが、なぜか画像が表示されません。
71
+
72
+ リソーススクリプト
73
+ ```image.rc
74
+ icon1 BITMAP "R.bmp"
75
+ ```
76
+ ```C
77
+ #include <windows.h>
78
+
79
+ LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
80
+ HDC hdc , hBuffer;
81
+ PAINTSTRUCT ps;
82
+ static HBITMAP hBitmap;
83
+
84
+ switch (msg) {
85
+ case WM_DESTROY:
86
+ DeleteObject(hBitmap);
87
+ PostQuitMessage(0);
88
+ return 0;
89
+ case WM_CREATE:
90
+ hBitmap = LoadBitmap(
91
+ ((LPCREATESTRUCT)lp)->hInstance ,
92
+ TEXT("icon1")
93
+ );
94
+ return 0;
95
+ case WM_PAINT:
96
+ hdc = BeginPaint(hwnd , &ps);
97
+ hBuffer = CreateCompatibleDC(hdc);
98
+ SelectObject(hBuffer , hBitmap);
99
+
100
+ BitBlt(hdc , 0 , 0 , 500 , 500 , hBuffer , 500 , 500 , SRCCOPY);
101
+
102
+ DeleteDC(hBuffer);
103
+ EndPaint(hwnd , &ps);
104
+ return 0;
105
+ }
106
+ return DefWindowProc(hwnd , msg , wp , lp);
107
+ }
108
+
109
+ int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
110
+ PSTR lpCmdLine , int nCmdShow ) {
111
+ HWND hwnd;
112
+ MSG msg;
113
+ WNDCLASS winc;
114
+
115
+ winc.style = CS_HREDRAW | CS_VREDRAW;
116
+ winc.lpfnWndProc = WndProc;
117
+ winc.cbClsExtra = winc.cbWndExtra = 0;
118
+ winc.hInstance = hInstance;
119
+ winc.hIcon = LoadIcon(NULL , IDI_APPLICATION);
120
+ winc.hCursor = LoadCursor(NULL , IDC_ARROW);
121
+ winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
122
+ winc.lpszMenuName = NULL;
123
+ winc.lpszClassName = TEXT("test");
124
+
125
+ if (!RegisterClass(&winc)) return -1;
126
+
127
+ hwnd = CreateWindow(
128
+ TEXT("test") , TEXT("icon") ,
129
+ WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
130
+ CW_USEDEFAULT , CW_USEDEFAULT ,
131
+ CW_USEDEFAULT , CW_USEDEFAULT ,
132
+ NULL , NULL ,
133
+ hInstance , NULL
134
+ );
135
+
136
+ if (hwnd == NULL) return -1;
137
+
138
+ while(GetMessage(&msg , NULL , 0 , 0)) {
139
+ TranslateMessage(&msg);
140
+ DispatchMessage(&msg);
141
+ }
142
+ return msg.wParam;
143
+ }
144
+ ```
145
+ そして、DrawIconExを使わずDrawIconを使い、あとでStretchBltで拡大しようとしましたが、
146
+ 画質が悪いまま。
147
+
148
+ ほかにも方法がないか調べましたが、なにもありません。