bitmapクラスをiconクラスに変換する方法

このQ&Aのポイント
  • bitmapクラスをiconクラスに変換する方法が分かりません。
  • GetHiconを使って変換する方法を試してみたのですがアイコンが16色になってしまい画像が変わってしまいます。
  • 変換ソフトで使用するBitmapをIconに変換する関数を作ったのですが変換するところで止まっています。
回答を見る
  • ベストアンサー

bitmapクラスをiconクラスに変換する方法

bitmapクラスをiconクラスに変換する方法 bitmapクラスをiconクラスに変換する方法 今、画像変換ソフトをVisual Basic 2010 Express Editionで作っているのですがbitmapクラスをiconクラスに変換する方法が分かりません。 GetHiconを使って変換する方法を試してみたのですがアイコンが16色になってしまい画像が変わってしまいます。 変換ソフトで使用するBitmapをIconに変換する関数を作ったのですが変換するところで止まっています。 Public Function convert_to_ico(ByVal image As Bitmap) As Icon Dim loadimage As Bitmap = New Bitmap(16, 16, PixelFormat.Format24bppRgb) Dim draw As Graphics = Graphics.FromImage(loadimage) draw.DrawImage(image, 0, 0) Dim returnico As Icon Return returnico End Function 申し訳ありませんが、宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

質問する前にご自分でも検索する等して調べるようにしましょう。 下記を試して見て下さい。 http://okwave.jp/qa/q4926620.html

kazuki2010
質問者

お礼

ご回答ありがとうございました。 大変参考になりました。

kazuki2010
質問者

補足

Googleで質問する前に検索してみたのですがVB6用のものしか見つからず、今はサポートされていない関数が使われていてサンプルプログラムを実行できませんでした。(今ある関数に変えたのですが動作しませんでした)

その他の回答 (1)

回答No.2

>ご回答ありがとうございました。 >大変参考になりました。 まだ、質問受付中になっていますが、解決されていないのでしょうか?

kazuki2010
質問者

補足

リンク先にある方法で変換してみたのですが、保存された画像を見てみるとオレンジ色が赤に変わっていて16色に減色されていました。 減色せずに変換することは不可能なのでしょうか?

関連するQ&A

  • bitmap 画像のサイズを大きくしたいのですが...

    度々スミマセン 例えば600X600のpbox.image を使用して Dim canvas As g = Graphics.FromImage(pbox.Image) のような感じで800X600の graphics を取得したい場合 どの様にすればよろしいでしょうか? 大変申し訳ありません。宜しくお願いします。

  • imageクラスからiconクラスに変換したいです

    ご存知の方、教えて頂けますか? ImageListの中身、imageクラスをNotifyIconのアイコンに設定する為に、iconクラスに変換したいのですが どのようにすれば良いでしょうか?もしかして出来ないのでしょうか? 申し訳ありませんが、宜しくお願いします。

  • C#のGraphicsクラスについて(GDI+)

    以下のようにgraphicsクラスをつかった画像の描画をおこないました。 Graphics gr = Graphics.FromImage(mapObj); というふうにからのリソースからGraphicsオブジェクトをつくる方法です。 using System; using System.IO; using System.Windows.Forms; using System.Drawing; using System.Web; using System.Net; using System.Text; using System.Threading; using System.ComponentModel; public class MainClass{ public static void Main(string [] args){ NewForm formObj = new NewForm(); formObj.RenderMethod(); Application .Run(formObj); } } public class NewForm : Form{ public NewForm(){ this.Width = 500; this.Height = 500; } public void RenderMethod(){ Bitmap mapObj = new Bitmap(500,500); Graphics gr = Graphics.FromImage(mapObj); Image imageObj = Image.FromFile("C:\\test.jpg"); gr .DrawImage(imageObj, 0,0,150,150); this.BackgroundImage = mapObj; } } このほかに、フォームコントロールの thisl.CreateGraphics()という メソッドを使っても画像を描画できるとききました。 あるサンプルをみると public class NewForm : Form{ public NewForm(){ this.Width = 500; this.Height = 500; } public void RenderMethod(){ Graphics gr = this.CreateGraphics(); Image imageObj = Image.FromFile("C:\\test.jpg"); gr .DrawImage(imageObj, 0,0,150,150); } } とこのようにthis.CreateGraphics()をつかっていましたが 実際にはこれが描画されないのです。 Graphics gr = Graphics.FromImage(mapObj); というGraphicsクラスの静的メソッドを使う方法ではなく コントロールのCreateGraphicsメソッドをつかって描画するにはどうしたらよいのですか? 識者のかた、ご教授ください。

  • BASICで画像のx,y座標の取得方法について

    Active Basicでプログラムを書いています。 今、簡単なゲームを作ってみようと思い、プログラムを書いているのですが、画像の座標の取得の部分で躓いてしました。 画像Aに画像Bが触れたときに『アウト』とメッセージを出す、簡単な、物を避けるゲームなのですが、グローバルで、 Dim BombRect As RECT Dim HitoRect As RECT を定義して、画像が重なったかどうかを判定するときに、 GetWindowRect(hBmp04,BombRect) GetWindowRect(hBmp01,HitoRect) で、読み込もうとしましたが、座標が格納されてくれません。 hBmp01とhBmp04には、下のようにして画像を読み込みました。 'グローバル Dim hBmp01 As HWND Dim hBmp02 As HWND Dim hBmp03 As HWND Dim hBmp04 As HWND 'ウインドウ作成時 hBmp01 = LoadImage(0,".\画像\人\普通.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE) hBmp02 = LoadImage(0,".\画像\人\右.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE) hBmp03 = LoadImage(0,".\画像\人\左.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE) hBmp04 = LoadImage(0,".\画像\爆弾\ボム.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE) もし、やり方をご存知の方がいらっしゃいましたら、すみませんが、ご教授お願いします。 また、もっと簡単な方法がありましたら、そちらも教えていただけると嬉しいです。

  • VB.NETのグラフィック描画で困っています

    VB.NETでのグラフィックの記述方法ですが 何かをクリックすると描画させるのではなく 単にあるsubプロシージャ内でグラフィックを描画させる記述する方法として pictureBox1.Image=New Bitmap(PictureBox1.width,pictureBox1.Height) Dim g As Graphics = Graphics.FromImage(PictureBox1.Image) を教えていただきました。そこで private sub xy_keisan() '座標を計算させるプロシージャ disp_x() 'x座標に目盛りを表示させるプロシージャ disp_Y() 'xの目盛り数によってY座標の位置を変えて表示させるプロシージャ end sub private sub disp_x() pictureBox1.Image=New Bitmap(PictureBox1.width,pictureBox1.Height) Dim g As Graphics = Graphics.FromImage(PictureBox1.Image) g.DrawLine(****** end sub private sub disp_y() pictureBox1.Image=New Bitmap(PictureBox1.width,pictureBox1.Height) Dim g As Graphics = Graphics.FromImage(PictureBox1.Image) g.DrawLine(****** end sub のような記述(引数とか細かい所は端折っています)ですとdisp_yは描画されていますが,disp_xは消えてしまいます。 pictureBox1.Image=New Bitmap(PictureBox1.width,pictureBox1.Height) が消えてしまう原因だとおもって宣言場所を変えてみましたが同じです 逆にこれが無いと描画させることが出来なくなります。 これの意味も今ひとつ判りません よろしくお願い致します

  • BitmapをIDで指定したい

    お世話になります。 C++ 6.0 MFC で開発しております。 下記の方法で、ImageList_LoadImageを使用してHIMAGELISTを取得しています。 HIMAGELIST hImagList = ::ImageList_LoadImage(NULL, TEXT("bitmap5.bmp ),16, 0 CLR_NONE, IMAGE_BITMAP,LR_LOADFROMFILE"); そこで、ImageList_LoadImageの第2引数が現在TEXT("bitmap5.bmp )になっているのですが、(Resourceにbitmap5.bmpですでに登録している)IDB_BITMAP5を代わりに使用して、実現したいのですが、どのようにすればよいのでしょうか? ※MAKEINTRESOURCE(IDB_BITMAP5)を代わりにいれたのですが、失敗しました。 以上大変申し訳ございませんが、よろしくお願いします。

  • 兄弟のpictureboxは透過処理をするには?

    度々質問して申し訳ありません。 Controls.Addで親子にしたpicturebox はちゃんと透過処理してくれるのですが、 同じ親pictureboxの子供たち(兄弟)同士の透過処理が行われません。 違う設定が必要なのでしょうか? 教えていただけますか?よろしくお願いします。 文字数多くて載せられないので、重要であろう箇所のみです。スミマセン。 image = New Bitmap("c:\image.png")'透過部有 iconGraphics = Graphics.FromImage(image) Icon1 = New System.Windows.Forms.PictureBox iconGraphics.DrawImage(image, 0, 0, iconSize, iconSize) PictureBox1.Image = image Icon1.Location = New Point(8, 8) Icon1.Width = iconSize Icon1.Height = iconSize Icon1.BackColor = Color.Transparent PictureBox1.Controls.Add(Me.Icon1) Icon1.BringToFront() Icon1.Image = image

  • VB2005 でビットの深さ8の画像を処理したい。

    VB2005を使って簡単な画像処理のツールを制作しています。 処理内容は、画像ファイル(jpg)を読み込み、画像を縦に区切って 左側と右側を別のファイルに保存する、という処理です。 縦に区切る位置(x 座標)は、自由に指定できます。 上記のような処理を「任意の解像度(0~300 dpi)、ビットの深さ 8 」 の画像で行うには、どのようにしたらよいのでしょうか。 (ビットの深さ 8 の image からは Graphics オブジェクトを  作ることができず、そのため、読み込んだ画像の解像度を  保てませんでした。) ビットの深さが 24 の画像は、以下のようにして問題なく動きました。 "scanfile01.jpg" は、 解像度 300dpi / ビットの深さ 24 / 縦1500 × 横1200 ピクセル の画像ファイルです。 --------------- private sub splitImage()  '画像(src)の読み込み  Dim fs As New IO.FileStream("scanfile01.jpg", _     IO.FileMode.Open)  Dim src As Image = Image.FromStream(fs, False, False)  Dim srcG As Graphics = Graphics.FromImage(src) '解像度の取得用  'src を分割する位置(x座標)  '(横幅1500 の scanfile01.jpg を左右半分に分ける)  Dim cutx As Integer = 750   'src の左側を格納する Bitmap を新規作成  '(src の解像度を引き継ぐ)  Dim destLeft As Image = New Bitmap(cutx, src.Height, srcG)  Dim rect As New Rectangle(0, 0, cutx, src.Height)  Dim destLeftG As Graphics = Graphics.FromImage(destLeft)  Dim rect As New Rectangle(0, 0, cutx, src.Height)  destLeftG.DrawImage(src, 0, 0, rect, GraphicsUnit.Pixel)  'src の左側をファイルに保存  destLeft.Save("scanfile01-left.jpg" _         , System.Drawing.Imaging.ImageFormat.Jpeg)  destLeft.Dispose()  destLeftG.Dispose()  'src の右側を格納する Bitmap を新規作成  ~省略~  srcG.Dispose()  src.Dispose()  fs.Dispose() End Sub ---------------- ビットの深さ 8 の画像を読み込むと、実行時に  Dim srcG As Graphics = Graphics.FromImage(src) '解像度の取得用 の部分で「インデックス付きのピクセルから Graphics オブジェクトを作成できません」というエラーが発生します。 そこで、解像度は引き継がずに、以下のように変更してみました。 ・srcG の定義文を削除 ・destLeft の定義時に解像度は指定せず、以下のように変更   Dim destLeft As Image = New Bitmap(cutx, src.Height) すると、エラーは発生せずファイルが作成されましたが、 解像度が引き継がれずに元の画像よりずっと小さな画像になって 作成されていました。 (作成されたファイルを開くと、イメージが小さくなった分、  黒い隙間ができていました。) 300 dpi の画像を読み込んだので、VB2005 で作成される?Bitmap のデフォルトの解像度 96 dpi に変換される際にピクセル抜けが 発生して画像が小さくなったのだと思います。 ビットの深さ 8 の画像を半分に区切ってファイルに保存する方法は ないのでしょうか。また、任意の解像度でピクセル抜けが 発生しないようにしたいです。

  • VB.NET ピクチャーボックスのImageの一部をクリップボードにコピー

    Picturebox1.Image = New Bitmap(Picturebox1.Width, Picturebox1.Height) Dim g As Graphics = Graphics.FromImage(Picturebox1.Image) これ以降 g.DrawLine 等で描画を行っています そして、ピクチャーボックスの一部の領域(矩形)を指定して クリップボードにコピーしたいのですがどうしたらいいでしょうか よろしくお願いします 他のピクチャーボックスにその一部をコピーできるだけでもいいのですが

  • VB.netでのPictuerBoxに描写した内容の保存について。

    VB.netでのPictuerBoxに描写した内容の保存について。 PictureBoxに描写した内容を保存してみると、描写した項目事態は正しく保存されているのですが、背景が真っ黒になってしまいますこれは、なぜなのでしょうか? ソースは以下の様な感じです。 Dim bmp As Bitmap Dim g As Graphics bmp = New Bitmap(PictureBox1.Width, PictureBox1.Height) PictureBox1.Image = bmp g = Graphics.FromImage(PictureBox1.Image) g.DrawLine(Pens.AliceBlue, 0, 10, 20, 10) PictureBox1.Refresh() PictureBox1.Image.Save("test.jpg", System.Drawing.Imaging.ImageFormat.Jpeg) どなたかわかる方よろしくお願いいたします。

専門家に質問してみよう