none
特定圖片讀取像素顏色錯誤 RRS feed

  • 問題

  • 我想要寫一個讀取圖片並解析每格像素點RGBA的值,使用環境是WPF,

    節錄重點程式碼如下:

    //讀取圖片

    BitmapImage bitmap = new BitmapImage();
    bitmap.BeginInit();
    bitmap.UriSource = new Uri(ofd.FileName, UriKind.Absolute);
    bitmap.EndInit();
    image.Source = bitmap;


    //分析像素

    Point point = new Point(0, 0);
    CroppedBitmap cb = new CroppedBitmap(pic, new Int32Rect(point.X, point.Y, 1, 1));
    byte[] pix = new byte[4];
    cb.CopyPixels(pix, 4, 0);
    SolidColorBrush color = new SolidColorBrush(Color.FromArgb(pix[3], pix[2], pix[1], pix[0]));

    大部分的圖片測試都很順利,但是發現有特定的圖片會讀取到錯誤的值,像是這張

    http://pic5.nipic.com/20091229/4049423_111223059648_2.jpg

    來源是Google圖片

    黑色區域會抓到RGBA(0,0,0,0)的值,白色區域會抓到RGBA(0,0,254,0)

    因為也只有兩色,理不出個頭緒來,

    目前也還沒有測試到更多圖片是否也會出現這問題

    奇怪的是如果手動用小畫家另存png或jpg就會正常了,

    本來想上傳imgur怕Google圖片失效,但同理上傳下載後的圖也是正常,

    推測就是這張原圖有蹊蹺,

    因為也不是很熟jpg編碼之類的問題,

    想上來請問各位先輩有沒有遭遇過這種問題?



    2014年3月17日 上午 09:27

解答

  • 你用圖檔方式載入時,色深會與圖檔相同。

    一般 .jpg 是 24 bits color ,你的程式碼是 32 bits color

    所以正確做法是先開一個圖檔大小的 32 bits color ,再用 DrawImage 把圖檔畫進去,你才能用你的原始碼。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    • 已標示為解答 Double Light 2014年3月17日 下午 01:15
    2014年3月17日 下午 12:25

所有回覆

  • 你用圖檔方式載入時,色深會與圖檔相同。

    一般 .jpg 是 24 bits color ,你的程式碼是 32 bits color

    所以正確做法是先開一個圖檔大小的 32 bits color ,再用 DrawImage 把圖檔畫進去,你才能用你的原始碼。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    • 已標示為解答 Double Light 2014年3月17日 下午 01:15
    2014年3月17日 下午 12:25
  • 感謝,已解決問題
    2014年3月17日 下午 01:16