우리는 실제로 RAW
형식의 비트 맵 이미지를 가지고 있지만 Windows 비트 맵 형식을 사용합니다. 그러나 카메라를 제공하지 않으면 lib를 디코딩하여 좋은 결과를 얻을 수 없습니다. 여기이 비트 맵 조작 루틴에 해당하는 WIC 버전은 무엇입니까?
DecodeImageRaw
public static Bitmap DecodeImage(Bitmap raw_image)
{
if (raw_image == null || raw_image.PixelFormat != PixelFormat.Format8bppIndexed)
return null;
BitmapData data_in, data_out;
Bitmap rgb_image = new Bitmap(raw_image.Width, raw_image.Height, PixelFormat.Format24bppRgb);
data_in = raw_image.LockBits(new Rectangle(0, 0, raw_image.Width, raw_image.Height), ImageLockMode.ReadWrite, raw_image.PixelFormat);
data_out = rgb_image.LockBits(new Rectangle(0, 0, rgb_image.Width, rgb_image.Height), ImageLockMode.ReadWrite, rgb_image.PixelFormat);
try
{
DecodeImageRaw(raw_image.Width, raw_image.Height, data_in.Scan0, data_out.Scan0);
return rgb_image;
}
finally
{
raw_image.UnlockBits(data_in);
rgb_image.UnlockBits(data_out);
}
}
이미지를 디코딩하기 위해 카메라 LIB를 사용하는 방법이다 :
다음
잘 작동 코드이다. 위는 우리에게 잘 작동합니다.창문 이미징 요소를 사용하여 동일한 코드의 새로운 버젼 :
public static BitmapSource DecodeImage(BitmapSource raw_image)
{
if (raw_image == null || raw_image.Format != PixelFormats.Indexed8)
return null;
var w = raw_image.PixelWidth;
var h = raw_image.PixelHeight;
var dx = raw_image.DpiX;
var dy = raw_image.DpiY;
var in_image = new WriteableBitmap(w, h, dx, dy, PixelFormats.Indexed8, raw_image.Palette);
var out_image = new WriteableBitmap(w, h, dx, dy, PixelFormats.Rgb24, null);
in_image.Lock();
out_image.Lock();
var bufin = in_image.BackBuffer;
var bufout = out_image.BackBuffer;
var s = in_image.BackBufferStride;
try
{
raw_image.CopyPixels(Int32Rect.Empty, bufin, h*s, s);
out_image.AddDirtyRect(new Int32Rect(0, 0, w, h));
DecodeImageRaw(w, h, bufin, bufout);
return out_image;
}
finally
{
in_image.Unlock();
out_image.Unlock();
}
}
위 실제로 동일한 형상의 화상을 출력하지만 색이 잘못 (예를 들어, 배경은 "블루되어야 "하늘에, 그러나 그것은 갈색이된다.
그래서? 또한 나는 이유의 설명을 알고 싶은 원래 하나가 동등한 만드는 방법 새 코드?에 문제가 있습니다.
디코딩 된 이미지는이
과 같아야하지만이
편집과 같은 새로운 코드로 디코딩 된
첫 번째 편집 이후 일부 약간의 조정이있다 관련없는 내용을 쉽게 읽고 배제 할 수 있도록 코드에 추가하십시오. 예를 들어, 알고리즘간에 선택할 플래그는 bool
이었지만 지금 제거되었습니다. 그러나 동작은 동일하게 유지됩니다.
픽셀 형식의 WIC 명명 규칙은 GDI + 명명 규칙의 반대 인 파일에 나타나는 방식으로 구성 요소를 정렬하는 것입니다. –
고마워요! 이것은 내 문제를 해결하는 것 같다. –