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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像をループさせるうまい方法...
-
【EXCEL VBA】ダブルクリックで...
-
自作の地図をグーグルマップの...
-
OpenCVの透過処理
-
Visual Basic : ImageListの画...
-
検索キーワードがわかる広告無...
-
【PowerPoint】VBAで画像サイズ...
-
VB6での画像のサイズ変更に関して
-
モーダルウィンドウ内で複数の...
-
uwscの画像認識に失敗します。
-
UWSCの画像認識と条件分岐につ...
-
ワードプレスで画像を何枚か横...
-
OpenCV でのROIの指定方法について
-
画像を読み込む順番を指定した...
-
UWSCで指定箇所のみループ
-
UWSC 画像認識で条件分岐
-
Excel ユーザーフォームで表示...
-
VBAのユーザーフォームのイメー...
-
VBA シート毎に画像挿入
-
VBSでワードに画像を貼り付ける
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【EXCEL VBA】ダブルクリックで...
-
背景画像の繰り返しについて
-
EXCEL VBA 複数のImageコントロ...
-
「using Windows」でエラーが出る
-
jqueryスライダーを2段でスライ...
-
画像のピクセルデータの取得
-
ImageMagickでgif画像の一部が...
-
Excel ユーザーフォームで表示...
-
uwcs のマクロで画像認識をして...
-
uwscの画像認識に失敗します。
-
vb.net 画像の透過について
-
VBA シート毎に画像挿入
-
UWSC 画像判定と条件分岐について
-
UWSC「画像が無い場合」
-
gif 画像上の ボタンに リン...
-
Pythonでgif画像が上手く作れない
-
VBAのユーザーフォームのイメー...
-
UWSC 画像認識で条件分岐
-
パネルに画像
-
【WPF】画像の切り替え
おすすめ情報