[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAでpng画像ファイルを出力するとき色深度を24bitにしたい』(ジョニー)
エクセルに挿入した色深度24bitの画像データをグラフに張り付けて
pngファイルとして出力したく、
以下のコードを参考に利用させていただき、
画像ファイルが出力されるところまではできたのですが
色深度が32bitに変換されてしまいます。
24bitのまま出力するまたは24bitに変換するには
どのようにしたらよいでしょうか?
Dim myChart As ChartObject
For Each tobj In ActiveSheet.Shapes
If tobj.Type = 13 Then 'オブジェクトが画像ならType=13 tobj.CopyPicture Fname = tobj.Name 'オブジェクトの名前を取得 ACWidth = tobj.Width 'オブジェクトのサイズを取得(高さ) ACHeight = tobj.Height 'オブジェクトのサイズを取得(高さ) 'オブジェクトとほぼ同サイズの空のグラフを一時的に作る Set TCht = ActiveSheet.ChartObjects.Add(0, 0, ACWidth * 1, ACHeight * 1).Chart For Each myChart In ActiveSheet.ChartObjects 'myChart.Chart.ChartArea.Border.Color = RGB(0, 0, 0) 'グラフの枠線を消す myChart.Chart.ChartArea.Format.Line.Visible = msoFalse myChart.Chart.ChartArea.Interior.Color = RGB(0, 0, 0) 'グラフの背景を黒にする myChart.Select TCht.Paste Next 'グラフに画像をペーストする。 'エクスポート先はデスクトップ。ファイル名はオブジェクト名。タイプはpng(書き換えればjpeg等でもいける。) TCht.Export Filename:="C:\tmp|\ & Fname & ".png", filtername:="png" TCht.Parent.Delete 'グラフを削除する。 End If Next
< 使用 Excel:Excel2013、使用 OS:Windows10 >
それに、そもそもExcelは表計算アプリでしかなく、PNG形式で出力できるだけでよくやっていると思います。 どうしても変えたいならば、もしかするとディスプレイ設定を変えると連動して変わるかもしれませんが、最悪はPNGフォーマットに準じて、自分でグラフィックツールのようにバイナリで保存する事になるでしょう。 不可能ではないですが、VBAでは遅いだろうし、開発は大変だと思いますよ。
(???) 2019/12/12(木) 16:38
(ジョニー) 2019/12/13(金) 11:01
ここに書かれた関数を使うと、以下のようなコードで24bitのPNGにできそうです。
(メモリ上でBMP化する方法が判らなかったので、一旦BMPファイル化しています)
Sub test() Const tmpFile = "c:\tmp\test.bmp" Dim myStdPicture As StdPicture Dim gdipRet As GDIPlusStatusConstants
ActiveSheet.ChartObjects(1).Chart.Export tmpFile, "BMP" Set myStdPicture = LoadPicture(tmpFile) gdipRet = SavePicturePng(myStdPicture, "c:\tmp\test.png") Kill tmpFile End Sub (???) 2019/12/13(金) 13:48
(ジョニー) 2019/12/13(金) 14:47
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.