
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も見ています
-
JPEG24bitの画像に変換する方法
画像編集・動画編集・音楽編集
-
ビットマップの色数を変更するソフト知りませんか?
フリーソフト
-
画像のビット数を調べるには?
デジタルカメラ
-
-
4
GDI+を使ったビット数とDPIの扱い
Visual Basic(VBA)
-
5
8bitインデックス画像の入出力方法
Visual Basic(VBA)
-
6
画面を強制的に再描画させる方法
C言語・C++・C#
-
7
bmp形式の画像を色の深さを24ビットに変更する事は可能でしょうか?
Visual Basic(VBA)
-
8
ビットマップイメージの変更方法
Windows Vista・XP
-
9
画像 ビットの深さ
Windows 7
-
10
VBAにGDI+を参照させる方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アプリケーションのインターフ...
-
AS3でランダムな画像入れ替わり...
-
c 画像の一致を調べる
-
画像について
-
流れる画像
-
画像の名前の表示について
-
画像のビット数を変更する方法
-
画像処理したBitmapをピクチャ...
-
画像の件
-
ポイントしたサムネイルの画像...
-
画像にリンクする時の色の設定...
-
OpenGLを導入しようとすると
-
OpenCVでマスク処理で「ぼかし...
-
htmlで画像を横に並べて表示
-
UWSCでループ処理がうまくいき...
-
UWSCの画像認識について教えて...
-
thickboxを使って画像をポップ...
-
Cで画像を扱うプログラムを作ろ...
-
OpenCVでキャプチャした画像をb...
-
スライドショーの表示秒数につ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
背景画像の繰り返しについて
-
EXCEL VBA 複数のImageコントロ...
-
【EXCEL VBA】ダブルクリックで...
-
uwcs のマクロで画像認識をして...
-
UWSCの画像認識と条件分岐につ...
-
UWSCでループ処理がうまくいき...
-
vb.net 画像の透過について
-
「using Windows」でエラーが出る
-
Excel ユーザーフォームで表示...
-
UWSC 画像判定と条件分岐について
-
uwscの画像認識に失敗します。
-
画像のビット数を変更する方法
-
jqueryスライダーを2段でスライ...
-
画像処理したBitmapをピクチャ...
-
UWSCの色判定
-
UWSCについて
-
スマホでサイトの画像を長押し→...
-
VBAのユーザーフォームのイメー...
-
gif 画像上の ボタンに リン...
-
画像のピクセルデータの取得
おすすめ情報