http://oshiete.goo.ne.jp/qa/8880161.html
このページなどで画像の取扱に関して詳しく教えていただきました。
大体、思ったことはできるようになったのですが
まだ疑問点が残っております。
例えば、24bit画像をGDI+で読み込んで、
アルファチャンネルに情報を書き加えた後、
そのまま画像を出力します。
するとirfanviewなどで読み込んだ際に
アルファチャンネルに情報をもっているにも拘わらず
24bit画像をとして認識されてしまいます。
アルファチャンネルをもっているかいないかではなく
画像のインデックスのところに24か32bitかを識別するものが含まれているようです。
読み込んだ24bit画像を32bit画像に変換したいのですが
どのようにすれば良いでしょうか?
GdipCreateBitmapFromScan0(lngWidth, lngHeight, 0, PixelFormat32bppARGB, ByVal 0&, hBmp2)
を使えば、32bit画像を生成できますが
新たにbitmapオブジェクトを生成せずに
読み込んだオブジェクトのbit数を変更する方法を教えてください。
No.1ベストアンサー
- 回答日時:
mitarashiです。
シリーズで回答させていただきながら、当方も勉強してきましたが、そろそろ追い越されそうな雰囲気ですね。お望みの事は分かりかねます。検索して見つかるのは、32bitカラーのGraphicsを質問文中にもあるGdipCreateBitmapFromScan0で作成した32bitのbitmapから作成する方法です。myumyu1234さんが行われているのは、個々のPixelの透明度の変更の様なので、GdipBitmapLockBitsをお使いなのでしょうか。
回答にはなっておりませんが、前回のhttp://oshiete.goo.ne.jp/qa/8880161.htmlへの回答のコードがどうも分かり難いと思っていましたが、どうやら冗長らしいので、その部分を修正し、24->32bitへの変更も盛り込んだコードを投稿させていただきます。
なお、32bitをサポートしているPNGでの保存に変更しています。
構造体、API宣言は、下記が追加になります。
Public Const CLSID_PNG As String = "{557CF406-1A04-11D3-9A73-0000F81EF32E}"
Public Declare Function GdipGraphicsClear Lib "gdiplus" (ByVal graphics As Long, ByVal lColor As Long) As Long
Sub test()
Dim IID_IDispatch As GUID
Dim udtInput As GdiplusStartupInput
Dim lngToken As Long, lngStatus As Long
Dim pGraphics As Long
Dim pSrcBmp As Long, pDstBmp As Long
Dim lngWidth As Long, lngHeight As Long
Dim srcPath As String, dstPath As String
Const myDpi As Long = 300
srcPath = GetDesktopPath & "\sample1.jpg"
dstPath = GetDesktopPath & "\sample2.png"
' 初期化
udtInput.GdiplusVersion = 1
If GdiplusStartup(lngToken, udtInput, ByVal 0&) <> 0 Then
Exit Sub
End If
' 画像の読みこみ
If GdipCreateBitmapFromFile(ByVal StrPtr(srcPath), pSrcBmp) <> 0 Then
GdiplusShutdown lngToken
Exit Sub
End If
' 元画像サイズの取得
GdipGetImageWidth pSrcBmp, lngWidth
GdipGetImageHeight pSrcBmp, lngHeight
' コピー先Bitmap作成
lngStatus = GdipCreateBitmapFromScan0(lngWidth, lngHeight, 0, PixelFormat32bppARGB, ByVal 0&, pDstBmp)
'dpiの指定
lngStatus = GdipBitmapSetResolution(pDstBmp, myDpi, myDpi)
If lngStatus = 0 Then
' コピー用Graphics作成
If GdipGetImageGraphicsContext(pDstBmp, pGraphics) = 0 Then
'白で初期化(検索してみつかったコードは大抵含んでいたので追加)
GdipGraphicsClear pGraphics, &HFFFFFFFF
' イメージのコピー
GdipDrawImageRectI pGraphics, pSrcBmp, 0, 0, lngWidth, lngHeight
'Graphicsの始末
GdipDeleteGraphics pGraphics
'PNGで保存
Call GdipSaveImageToFile(pDstBmp, StrPtr(dstPath), ConvCLSID(CLSID_PNG), ByVal 0&)
End If
GdipDisposeImage pDstBmp
End If
GdipDisposeImage pSrcBmp
GdiplusShutdown lngToken
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- WordPress(ワードプレス) ホームページの画像が入れ替わらない 3 2022/12/24 16:00
- Excel(エクセル) Excel 2019 32-bit版を64-bit版にするには? 8 2023/07/28 14:20
- その他(プログラミング・Web制作) Visual Studio Code 関数の使い方について 3 2023/05/31 13:15
- HTML・CSS トリミングで表示した画像をクリックで元どおりにしたい 3 2022/12/16 18:49
- Visual Basic(VBA) VBAでArrayListを使う為の「mscorlib.tlb」の参照設定について 3 2022/03/23 19:45
- その他(パソコン・周辺機器) iPhone→ PC取り込んだHDR動画が白くなってる 1 2023/07/24 22:55
- C言語・C++・C# C言語の質問です。バイナリ形式で保存されたWindows Bitmap形式の画像ファイルを読み込み、 3 2023/07/19 14:58
- ホームページ作成・プログラミング ホームページビルダー11で作ったHPにYoutube動画を埋め込みたい 3 2022/12/10 10:45
- Excel(エクセル) EXCELマクロでandroidタブレットから取りんだJPEGファイルをうまくセルに貼り付けられない 2 2022/07/31 15:03
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
bmp形式の画像を色の深さを24ビットに変更する事は可能でしょうか?
Visual Basic(VBA)
-
画像のビット数を調べるには?
デジタルカメラ
-
GDI+を使ったビット数とDPIの扱い
Visual Basic(VBA)
-
-
4
VC#での24ビットbmp形式での保存方法
C言語・C++・C#
-
5
bitmap画像の保存がうまくいきません。
C言語・C++・C#
-
6
jpg画像を24bitカラーに変換
Mac OS
-
7
CloseとDisposeの違い
Visual Basic(VBA)
-
8
8bitインデックス画像の入出力方法
Visual Basic(VBA)
-
9
C#でbyte配列から画像を表示させたい
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Pythonでgif画像が上手く作れない
-
jqueryスライダーを2段でスライ...
-
EXCEL VBA 複数のImageコントロ...
-
【EXCEL VBA】ダブルクリックで...
-
画像をフーリエ変換するソース...
-
こんなことてしますか??
-
Excel ユーザーフォームで表示...
-
uwscについて質問です。
-
gif 画像上の ボタンに リン...
-
VBA シート毎に画像挿入
-
イメージマップでマウスオーバ...
-
uwcs のマクロで画像認識をして...
-
ヒストグラム類似度による画像...
-
Leafletで画像をon、offさせる...
-
Pythonのプログラム初心者の問題
-
UWSCの画像認識と条件分岐につ...
-
自作の地図をグーグルマップの...
-
EXCELに貼り付けた画像の位置を...
-
gif画像が壊れて読み込まない
-
画像のビット数を変更する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
こんなことてしますか??
-
【EXCEL VBA】ダブルクリックで...
-
Excelで画像URLを1つずつセル...
-
EXCEL VBA 複数のImageコントロ...
-
HTMLで画像をポップアップで表...
-
背景画像の繰り返しについて
-
Excel ユーザーフォームで表示...
-
gif 画像上の ボタンに リン...
-
VBA シート毎に画像挿入
-
jQuery . プログラミング 助け...
-
VBAのユーザーフォームのイメー...
-
jqueryスライダーを2段でスライ...
-
ホームページバナーを(画像が...
-
「using Windows」でエラーが出る
-
スマホでサイトの画像を長押し→...
-
【WPF】画像の切り替え
-
PowerPoint VBA で画像の鮮明度...
-
画像のピクセルデータの取得
-
UWSCの色判定
-
UWSCを使った画像認証マク...
おすすめ情報