質問編集履歴

1

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

2021/09/07 11:30

投稿

A_.1
A_.1

スコア6

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- 私はDrawTextExでアイコンを表示させたのですが、画質がとても悪すぎます。
1
+ 私はDrawIconExでアイコンを表示させたのですが、画質がとても悪すぎます。
2
2
 
3
3
  ```C
4
4
 
@@ -50,7 +50,7 @@
50
50
 
51
51
  HWND hwnd;
52
52
 
53
- HBRUSH hBrush = CreateSolidBrush(RGB(0,0,0));
53
+ HBRUSH hBrush = CreateSolidBrush(RGB(255,255,255));
54
54
 
55
55
  WNDCLASS winc;
56
56
 
@@ -117,3 +117,179 @@
117
117
 
118
118
 
119
119
  環境は、MinGW-win32でコンパイル方法は、gcc -mwindows test.c test.oです。
120
+
121
+
122
+
123
+ 表示させたい画像
124
+
125
+ ![画像](9f56e51ecf0b68ef776e39b978b8a6a2.png)
126
+
127
+
128
+
129
+ でも実行すると、
130
+
131
+ ![画像](40f6cf53a9442be0be2881d84bfe5c0c.png)
132
+
133
+ こうなります。
134
+
135
+
136
+
137
+ 試したこと
138
+
139
+ BITMAPを使おうと思いましたが、なぜか画像が表示されません。
140
+
141
+
142
+
143
+ リソーススクリプト
144
+
145
+ ```image.rc
146
+
147
+ icon1 BITMAP "R.bmp"
148
+
149
+ ```
150
+
151
+ ```C
152
+
153
+ #include <windows.h>
154
+
155
+
156
+
157
+ LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
158
+
159
+ HDC hdc , hBuffer;
160
+
161
+ PAINTSTRUCT ps;
162
+
163
+ static HBITMAP hBitmap;
164
+
165
+
166
+
167
+ switch (msg) {
168
+
169
+ case WM_DESTROY:
170
+
171
+ DeleteObject(hBitmap);
172
+
173
+ PostQuitMessage(0);
174
+
175
+ return 0;
176
+
177
+ case WM_CREATE:
178
+
179
+ hBitmap = LoadBitmap(
180
+
181
+ ((LPCREATESTRUCT)lp)->hInstance ,
182
+
183
+ TEXT("icon1")
184
+
185
+ );
186
+
187
+ return 0;
188
+
189
+ case WM_PAINT:
190
+
191
+ hdc = BeginPaint(hwnd , &ps);
192
+
193
+ hBuffer = CreateCompatibleDC(hdc);
194
+
195
+ SelectObject(hBuffer , hBitmap);
196
+
197
+
198
+
199
+ BitBlt(hdc , 0 , 0 , 500 , 500 , hBuffer , 500 , 500 , SRCCOPY);
200
+
201
+
202
+
203
+ DeleteDC(hBuffer);
204
+
205
+ EndPaint(hwnd , &ps);
206
+
207
+ return 0;
208
+
209
+ }
210
+
211
+ return DefWindowProc(hwnd , msg , wp , lp);
212
+
213
+ }
214
+
215
+
216
+
217
+ int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
218
+
219
+ PSTR lpCmdLine , int nCmdShow ) {
220
+
221
+ HWND hwnd;
222
+
223
+ MSG msg;
224
+
225
+ WNDCLASS winc;
226
+
227
+
228
+
229
+ winc.style = CS_HREDRAW | CS_VREDRAW;
230
+
231
+ winc.lpfnWndProc = WndProc;
232
+
233
+ winc.cbClsExtra = winc.cbWndExtra = 0;
234
+
235
+ winc.hInstance = hInstance;
236
+
237
+ winc.hIcon = LoadIcon(NULL , IDI_APPLICATION);
238
+
239
+ winc.hCursor = LoadCursor(NULL , IDC_ARROW);
240
+
241
+ winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
242
+
243
+ winc.lpszMenuName = NULL;
244
+
245
+ winc.lpszClassName = TEXT("test");
246
+
247
+
248
+
249
+ if (!RegisterClass(&winc)) return -1;
250
+
251
+
252
+
253
+ hwnd = CreateWindow(
254
+
255
+ TEXT("test") , TEXT("icon") ,
256
+
257
+ WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
258
+
259
+ CW_USEDEFAULT , CW_USEDEFAULT ,
260
+
261
+ CW_USEDEFAULT , CW_USEDEFAULT ,
262
+
263
+ NULL , NULL ,
264
+
265
+ hInstance , NULL
266
+
267
+ );
268
+
269
+
270
+
271
+ if (hwnd == NULL) return -1;
272
+
273
+
274
+
275
+ while(GetMessage(&msg , NULL , 0 , 0)) {
276
+
277
+ TranslateMessage(&msg);
278
+
279
+ DispatchMessage(&msg);
280
+
281
+ }
282
+
283
+ return msg.wParam;
284
+
285
+ }
286
+
287
+ ```
288
+
289
+ そして、DrawIconExを使わずDrawIconを使い、あとでStretchBltで拡大しようとしましたが、
290
+
291
+ 画質が悪いまま。
292
+
293
+
294
+
295
+ ほかにも方法がないか調べましたが、なにもありません。