我用下面的代碼克隆位圖圖像不鎖定原始文件鎖定。但是我正面臨克隆圖像(.Gif)與原始圖像不一樣的問題。特別是,克隆圖像的顏色不合適。需要克隆位圖圖像,而不對原始圖像
我做錯了什麼?有沒有更好的方法讓內存中的圖像和原始文件從硬盤上刪除?
代碼:
private Bitmap CloneImage(Bitmap src)
{
if (src == null)
return src;
Bitmap bitmap = new Bitmap(src.Size.Width, src.Size.Height, src.PixelFormat);
System.Drawing.Rectangle bounds = new System.Drawing.Rectangle(0, 0, src.Width, src.Height);
System.Drawing.Imaging.BitmapData bmpData = src.LockBits(bounds, System.Drawing.Imaging.ImageLockMode.ReadWrite, src.PixelFormat);
System.Drawing.Imaging.BitmapData newBmpData = bitmap.LockBits(bounds, System.Drawing.Imaging.ImageLockMode.ReadWrite, src.PixelFormat);
IntPtr bPtr = bmpData.Scan0;
IntPtr nbPtr = newBmpData.Scan0;
int bytes = Math.Abs(bmpData.Stride) * src.Height;
byte[] rgbValues = new byte[bytes];
System.Runtime.InteropServices.Marshal.Copy(bPtr, rgbValues, 0, bytes);
System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, nbPtr, bytes);
bitmap.UnlockBits(newBmpData);
src.UnlockBits(bmpData);
return bitmap;
}
原始圖像:
克隆的映像:
有什麼'src.PixelFormat'在運行時?什麼是跨越式的價值?這看起來像一個調色板問題。各個像素位於正確的位置,因此memcpy代碼可能是正確的。 – usr
我猜PixelFormat是Format8bppIndexed,並且生成的圖像具有正確的像素信息,只是錯誤/錯誤的顏色表。 – sisve
你有沒有試過'位圖結果=新的位圖(源);'? – Rotem