• ベストアンサー

GDI+を使ったビット数とDPIの扱い

mitarashiの回答

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

こちらでそれらしい関数を探してみて下さい。 https://github.com/javiercrowsoft/cairo-vb6/blob/master/CSChart/GDI%2B/Codigo2/GpGDIPlus/Module/modGDIPlus.bas 本家のこちらもご参考になるでしょう。 http://msdn.microsoft.com/en-us/library/ms533969(v=vs.85).aspx 色深度については、GdipGetImagePixelFormatを検索してみつかった下記コードで、8bitIndexedのBMPについては、"&H" & Hex(Depth) -> PixelFormat8bppIndexed = &H30803が得られました。透明が入っていると所期の結果にならないとあり、返事ももらえていない様ですが... http://www.vbforums.com/showthread.php?718163-GDI-GdipGetImagePixelFormat-%28untrusted%29 以上、とりあえずご参考まで。

myumyu1234
質問者

お礼

毎度毎度、ご回答ありがとうございます。 GdipGetImagePixelFormatの方はうまくいきました。 dpiの取得の方なのですが Private Declare Function GdipGetImagePixelFormat Lib "gdiplus.dll" ( _ ByVal pImage As Long, _ ByRef pFormat As Long) As Long を宣言して Call GdipGetDpiX(hBmp, dpi_x) で取得を試みたのですが dpi_xの値は0になってしまいます。 どうすれば良いでしょうか?

myumyu1234
質問者

補足

間違いました 宣言する関数は Private Declare Function GdipGetDpiX Lib "gdiplus" (ByVal graphics As Long, dpi As Single) As Long です。 これでうまくいかないのですがなぜでしょうか?  

関連するQ&A

  • 画像のビット数を変更する方法

    http://okwave.jp/qa/q8880161.html このページなどで画像の取扱に関して詳しく教えていただきました。 大体、思ったことはできるようになったのですが まだ疑問点が残っております。 例えば、24bit画像をGDI+で読み込んで、 アルファチャンネルに情報を書き加えた後、 そのまま画像を出力します。 するとirfanviewなどで読み込んだ際に アルファチャンネルに情報をもっているにも拘わらず 24bit画像をとして認識されてしまいます。 アルファチャンネルをもっているかいないかではなく 画像のインデックスのところに24か32bitかを識別するものが含まれているようです。 読み込んだ24bit画像を32bit画像に変換したいのですが どのようにすれば良いでしょうか? GdipCreateBitmapFromScan0(lngWidth, lngHeight, 0, PixelFormat32bppARGB, ByVal 0&, hBmp2) を使えば、32bit画像を生成できますが 新たにbitmapオブジェクトを生成せずに 読み込んだオブジェクトのbit数を変更する方法を教えてください。

  • つくった画像をBMP形式に保存するときに4bitで保存するには?

    仕事でビットマップ形式の画像をつくらないといけないのですが、 つくった画像をBMP形式に保存するときに4bitで保存するにはどうしたら 良いでしょうか? もともとはイラストレーターで制作されたデータなので、ai形式やeps形式で 保存されています。それをPhotoshopの7やCS2で開いて、photoshop上で bmp形式で保存しました。 すると保存される前に「BMPオプション」というダイヤログボックスが 出て、そこでbitを選択できるようになってはいるのですが、選択可能な bitは、「16bit」「24bit」「32bit」だけなのです。 「1bit」「4bit」「8bit」も薄い字で項目としてはあるのですが、 何故かこの三つのbitは薄い字になっていて選択が出来なくなっています。 Photoshopではダメでも構いません。何か他のソフトで4bitにするにはどう したら良いでしょうか。 ちなみに、96dpiで100ピクセルほどのサイズの画像を4bitで保存 しようとしています。 宜しくお願い致します。

  • A-Seriesのビット数は64ですか?

    先日http://okwave.jp/qa/q8403038.html の質問をした者です。 あの回答を見て、新しいパソコンを買おうと思う、AMDのAPUを使ったパソコンを作りたいと思ったのですが、 A-seriesのAPUはすべて64Bitですか? アマゾンなどで調べてもわかりません。 もし32Bitもあるなら、AMD A-Series A10 6800K Black Edition は64Bitですか? あと見分け方はありますか? 詳しい方回答お願いいたします。質問が多くてすみません・・・

  • ビット数が上がらない?

    以前にもディスプレイ関係で質問させて頂いた者です。 http://okwave.jp/qa4207784.html 画像の発色がおかしくなり、色ムラが出るようになりました。 以前の質問で、どうやらビット数が足りないのが原因だということがわかったのですが、ビット数は常に「最高(32ビット)」に設定してあります。 プロパティで何度かビット数を変更してみたのですが、全く変化ありませんでした。 しばらく前までは普通に使えていたのですが、何が原因でおかしくなったのかわかりません。最後の手段としてXPの再インストールまで試みましたが直りませんでした。 OSにもビデオカードにも問題がないとなると、あとはディスプレイそのものの故障でしょうか? それとも他に原因があるのでしょうか? 原因と解決策に心当たりのある方、どなたかご教授お願いします。 ちなみに ・PC:NEC VALUESTAR VT700/6D(ディスプレイは付属の液晶ディスプレイ) ・ビデオカード:NVIDIA GF6200A です。

  • CASLII 文字コードのビット数について

    こんにちは、基本情報技術者資格取得を目指しているものです。 全ての文字に対して別々の16進数2けた(8ビット)のコードが割り振られている、とテキストにあるのですが16進数2ケタなら情報量は32ビット(16bit*2=32bit)になるのではないでしょうか? 初心者質問で申し訳ないのですが、ご教授お願い致します。

  • 5.1byteは何bitですか?

    シスアドの勉強をしてるのですが、わけがわかりません。 特に進数については全く理解できません。 <問題> Q5.1byteは何bitですか? 2bit 8bit 10bit 回答が付いてない問題なので、正解が分かりません。が、私の感覚では、8ビット=1バイトだから、 答えは0.63ビットでは・・?と思います。 実際の回答と、どうしてそうなるのかを教えていただけないでしょうか?

  • ■解像度の低い画像(72dpi-180dpi)をカラー印刷したい

    ■解像度の低い画像(72dpi-180dpi)をカラー印刷したい お世話になります。 主にWeb用に撮影されたjpg画像を使って 紙用カタログを作ることになりました。 印刷屋さんには画像解像度は300dpiあることが好ましいと言われたのですが、 果たして72dpiの画像(ピクセル数も少ない)を敢えて300dpiに保存し直すことに意味はあるのでしょうか。 ネットで調べても、意味はない派と、photoshopが足りないピクセルを足してくれるのでやはり解像度は上げた方がよい派に意見が分かれているようです。 ピクセル数が十分にある画像なら解像度を上げる意味もある気はするのですが、 ピクセル数が足りない(例:本来300dpiで3x4cmの仕上がりにしたいのに、 72dpiで3x4cm分の大きさしかない、またはそれにすら満たない) 場合に意味があるのでしょうか。 それから、使うjpg画像はRGBになっているのですが、これもやはりIndesignに貼る前に Photoshop上でCMYKに変えた方がよいでしょうか。 作業環境は Mac OS10.6, CS4 印刷はオフセットではなく、デジタル印刷です。 ご意見お待ちしております。

  • 8bitインデックス画像の入出力方法

    http://okwave.jp/qa/q8852322.html http://okwave.jp/qa/q8856128.html このページで画像の配列への入出力の仕方を教えていただきました。 配列の読み書きの方法が分かればできるかと思ったのですが やり方がわかりませんでしたので質問いたします。 24あるいは32bitの場合には教えていただいた方法で問題ないのですが 8bitの画像(インデックスカラー画像)の場合にはどうしたら良いでしょうか? 8bit画像を GdipCreateBitmapFromFile(ByVal StrPtr(strInName), pSrcBitmap) で取得し、そのまま GdipSaveImageToFile pSrcBitmap, StrPtr(strOutName), encTIFF, VarPtr(udtEncParam) を使って、別の画像形式に再圧縮して出力しても 8bit画像として出力されるので、 pSrcBitmapにはインデックスカラーに関する情報と 256階調(8bit)での画像情報も含まれているようです。 しかしながら、 GdipBitmapGetPixel pSrcBitmap, x, y, myARGB で画像情報を抽出すると 8bit画像を読み込んだとしても 32bitカラー情報として抽出されてしまいます。 http://www.vbforums.com/showthread.php?718163-GDI-GdipGetImagePixelFormat-(untrusted) このサイトにPixelFormatの設定の仕方が書かれてあって、 PixelFormat24bppRGB = &H21808 を用いると24bit画像として出力できることが分かりました。 PixelFormat8bppIndexed = &H30803 を指定してみたのですが、 一応、8bit画像として出力することは確認できたのですが 出力にものすごく時間がかかってしまうのですが。 恐らくインデックスを生成するのに時間がかかっているのだと思うのですが 既にインデックスがでている場合にどのように指定すれば良いか、 8bit画像からインデックスを抽出するのかが分からないのですが。 どのようにすれば インデックスカラーと256階調(8bit)での画像情報を 配列に読み込み、および配列から画像への書き出しを行えますでしょうか?

  • カラー写真をスキャナーで取り込んで印刷する

    カラー写真をスキャナーで取り込んで印刷したいと思っています(ネガはありません)その際、できるだけ綺麗に元の写真に忠実に取り込みたいと思いますが、現実問題として解像度はどれくらいがよいのでしょうか。使用しているスキャナーはエプソンのGT-7700U(解像度;主走査:1200dpi/副走査:2400dpi)、プリンターはPM-930C(解像度2880dpi×2880dpi)です。また、カラー写真を取り込むときに24bit、42bitの選択ができるのですが、42bitで取り込むと画像がtifファイルとして保存され、L判(縦12cm×横8cm)の大きさが約14Mbになります。(24bitだとjpegで保存され1枚200Kbです)まとまりの無い文になりましたが、問題は適切な解像度とbit数を24bitにするか48bitにするかです。(200kbと14Mbの大きさの違いほど印刷された写真に違いはあるのでしょうか)よろしくお願いします。

  • 1ビットオーディオの原理と利点は?

    ちょっと前から1ビットオーディオが流行っているようですが、いまいち原理が理解できません。 ・これは、CDのPCMが16bit44.1kHzであるように1bit11.2MHzのPCMだと考えてよいのでしょうか? 言い方を変えれば、300dpi256色のグラデーションと4800dpiの白黒ディザリングの違いのように理解していますがそれで正しいのでしょうか? ・増幅時にDA変換を通さないので音が良いと聞きますが、1bitなのにどうやって増幅するのでしょうか?highとlowの値自体を変化させるのでしょうか? また、従来でも16ビットまたはそれ以上のデジタル増幅はあったと思うのですがそれと比べてなぜ音が良いのでしょうか? ・「ΔΣ変調」というものがあって、原理図を見るとFM変調を矩形波でやっているように見えますがそれであっていますか? ・ローパスフィルタでΔΣ変調されたデータが元波形になる理屈を教えてください。 また、そのときに音質が劣化するのではないでしょうか? ・素直にPCMの量子化ビット数を上げていればいいのではないですか?何か1bitならではの利点があるのですか?