WPF BitmapSource /BitmapImage 獲取畫素點顏色
阿新 • • 發佈:2021-07-12
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Drawing; using System.Windows.Forms; using System.Windows.Forms.ComponentModel; using System.Drawing.Imaging; using System.Windows.Media.Imaging; using System.Runtime.InteropServices; using System.Windows.Media; using System.Windows; namespace WpfMosaic { [StructLayout(LayoutKind.Sequential)] public struct PixelColor { public byte Blue; public byte Green; public byte Red; public byte Alpha; } public class Utils { public static PixelColor[,] GetPixels(BitmapSource source) { if (source.Format != PixelFormats.Bgra32) source = new FormatConvertedBitmap(source, PixelFormats.Bgra32, null, 0); PixelColor[,] pixels = new PixelColor[source.PixelWidth, source.PixelHeight]; int stride = source.PixelWidth * ((source.Format.BitsPerPixel + 7) / 8); GCHandle pinnedPixels = GCHandle.Alloc(pixels, GCHandleType.Pinned); source.CopyPixels( new Int32Rect(0, 0, source.PixelWidth, source.PixelHeight), pinnedPixels.AddrOfPinnedObject(), pixels.GetLength(0) * pixels.GetLength(1) * 4, stride); pinnedPixels.Free(); return pixels; } } }
// 用法:
//var pixels = GetPixels(image);
//if(pixels[7, 3].Red > 4)