none
Bitmap(Image)で色ずれした画像ができる RRS feed

  • 質問

  • PictureBox1.ImageLocation = JpgFileName;
    PictureBox1.Load();
    Bitmap BPicture = new Bitmap(PictureBox1.Image);

    上記のように、PictureBoxにjpg画像を表示し、そのImageを使ってBitmap(Image)でbmp画像を作成すると色ずれをおこした画像になってしまいます。
    元の画像に白い縦の線があると、昔のブラウン管テレビのように左右に赤と青の線がでてきます。
    PictureBoxに表示されているjpg画像は正常なので、Bitmap(Image)でbmp画像を作る際の問題だとおもうのですが、何か解決策は無いでしょうか。

    2012年8月13日 1:26

すべての返信

  • コンストラクタで複製すると確か 32bpp になった気がするので、その影響でしょうか。(ちょっと考えづらいところではありますが)
    DrawImage で描いたら状況が変化しますか?

    イメージ:

    Image originalImage = PictureBox1.Image;
    Bitmap bmp = new Bitmap(originalImage.Width, originalImage.Height,
    	originalImage.PixelFormat);
    using (Graphics g = Graphics.FromImage(bmp))
    {
    	g.DrawImage(originalImage, 0, 0);
    }

    2012年8月13日 2:05
    モデレータ
  • // 複製が必要なら
    Bitmap BPicture = (Bitmap)PictureBox1.Image.Clone();
    
    // 単に参照したいだけなら
    Bitmap BPicture = (Bitmap)PictureBox1.Image;

    かなぁ? Bitmapクラスはコンストラクターを使うよりもClone()メソッドを使った方が正確な複製ができます。
    2012年8月13日 2:34
  • お返事有り難うございます。
    DrawImage で書いても結果は同じ、やはり色ずれが発生します。

    2012年8月14日 2:23
  • お返事有り難うございます。

    Bitmap BPicture = (Bitmap)PictureBox1.Image.Clone();
    Bitmap BPicture = (Bitmap)PictureBox1.Image;

    いずれもBPictureが正常に作成されない様です。
    PropertyIdList とPropertyItems で例外が発生しているようです。

    2012年8月14日 2:37
  • いろいろと前提を聞けていなかったので改めて。

    Bitmap BPicture =(Bitmap)PictureBox1.Image.Clone();
    Bitmap BPicture =(Bitmap)PictureBox1.Image;

    いずれもBPictureが正常に作成されない様です。
    PropertyIdList とPropertyItems で例外が発生しているようです。

    この返答に違和感がありました。特に「Bitmap BPicture =(Bitmap)PictureBox1.Image;」の部分です。
    これは BPicture と PictureBox1.Image がまったく同じものになっていることを意味しますが、その状態でも「BPicture が正常に作成されない様です」と書かれているのはなぜでしょうか?

    BPicture をその後、どのように扱っていますか?
    「昔のブラウン管テレビのように左右に赤と青の線がでてきます」とは、どのように確認した結果ですか?

    推測するに、Save か何かしているのですよね?
    保存されているのであればそれに関わる具体的な情報を出してください。

    また、一般の JPEG 画像では再現しないのであれば、その JPEG 画像そのものか、同じ性質を持つ JPEG 画像を提供できませんか?具体的なことがわからないので、第三者にはアドバイスしづらいため。
    (提供できるかの判断の際には、機密保持、著作権に気をつけてください)

    2012年8月14日 3:47
    モデレータ