質問編集履歴
3
MakeUnreadCountIcon内の下地となる画像読み込み箇所のソースコードを変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -94,8 +94,9 @@
|
|
94
94
|
CImage ciLoadImage;
|
95
95
|
CImage ciBackImage;
|
96
96
|
CDC *pDC = GetDC();
|
97
|
-
|
97
|
+
CString strIconPath;
|
98
|
-
c
|
98
|
+
strIconPath.Format( _T( "下地となるアイコンファイルのパス" ) );
|
99
|
+
ciLoadImage.Load( strIconPath );
|
99
100
|
ciBackImage.Create( 32, 32, 24, 0 );
|
100
101
|
HDC hDC = ciBackImage.GetDC( );
|
101
102
|
DrawIconEx( hDC, 0, 0, hIcon, 32, 32, 0, NULL, DI_NORMAL );
|
2
誤字等の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
元となる画像のビット数は24bitなのに、出力される画像のビット数が32bitになってしまう。
|
7
7
|
|
8
8
|
### 調査内容
|
9
|
-
以下のようにCImageクラスを利用しないパターンも実装してみましたが、出力されるファイルが
|
9
|
+
以下のようにCImageクラスを利用しないパターンも実装してみましたが、出力されるファイルが真っ黒の何も描画されていない画像になってしまいます。
|
10
10
|
```C++
|
11
11
|
void CTalkListDlg::MakeUnreadCountIcon( int nUnreadCount )
|
12
12
|
{
|
@@ -21,19 +21,19 @@
|
|
21
21
|
|
22
22
|
// 赤い円を描画
|
23
23
|
省略
|
24
|
-
Ellipse( hDC, nCircleLeft, nCircleTop, nCircleRight, nCircleBottom );
|
24
|
+
Ellipse( hMemDC, nCircleLeft, nCircleTop, nCircleRight, nCircleBottom );
|
25
25
|
省略
|
26
26
|
//
|
27
27
|
|
28
28
|
// 未読件数を描画
|
29
29
|
CString strUnreadCount;
|
30
30
|
省略
|
31
|
-
DrawText( hDC, strUnreadCount, strUnreadCount.GetLength( ), rcText, DT_SINGLELINE | DT_CENTER | DT_VCENTER );
|
31
|
+
DrawText( hMemDC, strUnreadCount, strUnreadCount.GetLength( ), rcText, DT_SINGLELINE | DT_CENTER | DT_VCENTER );
|
32
32
|
DeleteObject( hNewFont );
|
33
33
|
//
|
34
34
|
|
35
35
|
CString strOutputFile = _T( "アイコンファイルの出力先パス" );
|
36
|
-
HBITMAP hBitmap = (HBITMAP)GetCurrentObject( hDC, OBJ_BITMAP );
|
36
|
+
HBITMAP hBitmap = (HBITMAP)GetCurrentObject( hMemDC, OBJ_BITMAP );
|
37
37
|
SaveIconFile( hBitmap, strOutputFile );
|
38
38
|
|
39
39
|
DeleteObject( hIcon );
|
1
調査内容、試行内容とそのソースコードを追記しました。お手数おかけして申し訳ございませんが、よろしくお願いいたします。
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,6 +4,42 @@
|
|
4
4
|
### 発生している問題・エラーメッセージ
|
5
5
|
出力した画像の画質が荒くなり、画質の荒れ具合も毎回変化して不安定。
|
6
6
|
元となる画像のビット数は24bitなのに、出力される画像のビット数が32bitになってしまう。
|
7
|
+
|
8
|
+
### 調査内容
|
9
|
+
以下のようにCImageクラスを利用しないパターンも実装してみましたが、出力されるファイルが不正(開けず)でアイコンの変更も反映されませんでした。
|
10
|
+
```C++
|
11
|
+
void CTalkListDlg::MakeUnreadCountIcon( int nUnreadCount )
|
12
|
+
{
|
13
|
+
HICON hIcon = (HICON)LoadImage( AfxGetApp( )->m_hInstance, MAKEINTRESOURCE( アイコンファイルのリソースID ), IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR );
|
14
|
+
|
15
|
+
HDC hDC = ::GetDC( m_hWnd );
|
16
|
+
HDC hMemDC = CreateCompatibleDC( hDC ); // メモリデバイスコンテキスト作成
|
17
|
+
HBITMAP hBmp = CreateCompatibleBitmap( hMemDC, 32, 32 ); // サイズ指定してビットマップ作成
|
18
|
+
::ReleaseDC( m_hWnd, hDC );
|
19
|
+
SelectObject( hMemDC, hBmp );
|
20
|
+
DrawIconEx( hMemDC, 0, 0, hIcon, 32, 32, 0, NULL, DI_NORMAL | DI_DEFAULTSIZE );
|
21
|
+
|
22
|
+
// 赤い円を描画
|
23
|
+
省略
|
24
|
+
Ellipse( hDC, nCircleLeft, nCircleTop, nCircleRight, nCircleBottom );
|
25
|
+
省略
|
26
|
+
//
|
27
|
+
|
28
|
+
// 未読件数を描画
|
29
|
+
CString strUnreadCount;
|
30
|
+
省略
|
31
|
+
DrawText( hDC, strUnreadCount, strUnreadCount.GetLength( ), rcText, DT_SINGLELINE | DT_CENTER | DT_VCENTER );
|
32
|
+
DeleteObject( hNewFont );
|
33
|
+
//
|
34
|
+
|
35
|
+
CString strOutputFile = _T( "アイコンファイルの出力先パス" );
|
36
|
+
HBITMAP hBitmap = (HBITMAP)GetCurrentObject( hDC, OBJ_BITMAP );
|
37
|
+
SaveIconFile( hBitmap, strOutputFile );
|
38
|
+
|
39
|
+
DeleteObject( hIcon );
|
40
|
+
::ReleaseDC( m_hWnd, hDC );
|
41
|
+
}
|
42
|
+
```
|
7
43
|
|
8
44
|
### 結果
|
9
45
|
元の画像
|