none
获取.png中某个x.y坐标处的颜色为什么始终和我所见的不同 RRS feed

  • 问题

  • 我想在一张png格式,32bit的图片上取色。

    用以下代码获取这张图上的某个坐标的颜色始终和我所见的是不同的。不知道是什么原因?请赐教。

    StorageFile image = await StorageFile.GetFileFromPathAsync(imagePath); 
    IRandomAccessStream imageStream = await image.OpenReadAsync();

    BitmapDecoder bd = await BitmapDecoder.CreateAsync(imageStream);
    PixelDataProvider pd = await bd.GetPixelDataAsync(BitmapPixelFormat.Rgba8,BitmapAlphaMode.Straight,new BitmapTransform(),ExifOrientationMode.RespectExifOrientation,ColorManagementMode.ColorManageToSRgb);

    byte[] pixelData = pd.DetachPixelData();

    ulong startIndex =Convert.ToUInt64( X * 4 + Y * ImageWidth * 4); //X,Y是我选择的图片上的坐标,ImageWidth是这张图片的宽度
     
                Color c =  new Color()
                {

                    R = pixelData [startIndex],
                    G = pixelData [startIndex + 1],
                    B = pixelData [startIndex + 2],
                    A = pixelData [startIndex + 3]
                };


    2012年6月7日 5:35

答案

  • X, Y 值对吗,是相对以图片左上角的值? 但是BGRA的像素顺序是倒序的,也就是说你的X,Y需要基于右下角的值。

    比如说,图像是两个像素 Red,Blue。 系统渎出的pixelData  BGRA下则是 [255,0,0,255][0,0,255,255] ,相反的。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年6月8日 5:56
    版主