Tag: system.drawing.imaging

C#Drawing.Imaging丢弃GIF帧,如果它们相同

我需要加载GIF动画并将它们逐帧转换为位图。 为此,我使用Drawing.Imaging库逐帧提取我的GIF文件,然后将每个帧转换为位图。 除了没有像素差异的连续帧相同的时候,一切都很好。 图书馆似乎正在放弃这样的框架。 我通过简单的测试得出了这个结论。 我已经创建了一个圆圈的动画,这个圆圈在最后一个圆圈消失的时刻与尚未显示的新圆圈之间暂停,正在增长和缩小。 当我播放由我提取的位图组成的动画时,暂停不存在。 如果我比较相同帧长但不同数量的相同帧的GIF,则返回的totalframescount值是不同的。 我还观察到webbrowsers正确显示相同的连续帧。 public void DrawGif(Image img) { FrameDimension dimension = new FrameDimension(img.FrameDimensionsList[0]); int frameCountTotal = img.GetFrameCount(dimension); for (int framecount = 0; framecount < frameCountTotal; framecount++) { img.SelectActiveFrame(dimension, framecount); Bitmap bmp = new Bitmap(img); //cast Image type to Bitmap for (int i = 0; i < 16; i++) { […]

错误:调用线程无法访问此对象,因为另一个线程拥有它

我收到这个错误。 这是代码: Image image; BitmapImage BmpImg; MemoryStream ms; public void Convert() { ms = new MemoryStream(); image.Save(ms, ImageFormat.Jpeg); BmpImg = new BitmapImage(); BmpImg.BeginInit(); BmpImg.StreamSource = new MemoryStream(ms.ToArray()); BmpImg.EndInit(); } private void Btn_Click(object sender, RoutedEventArgs e) { Dispatcher.Invoke(new Action(() => { Image.Source = BmpImg; })); } 如何将System.Drawing.Image转换为BitmapImage并在wpf上显示相同的内容?

确定图像中是否使用Alpha通道

当我将图像带入我的程序时,我想确定是否: 他们有一个alpha通道 如果使用那个alpha通道 使用Image.IsAlphaPixelFormat #1非常简单。 但是对于#2 ,除了遍历每个像素之外,还有一种简单的方法可以确定至少有一个像素是否具有使用的alpha通道(即设置为除255以外的其他值)? 我需要的只是一个布尔值,然后我将决定是将其保存为32位还是24位。 更新 :我发现ImageFlags.HasTranslucent应该为我提供我正在寻找的东西 – 不幸的是,它根本不起作用。 例如,具有至少alpha通道为66(半透明)的像素格式的PNG继续报告False (用法: if((img.Flags & ImageFlags.HasTranslucent) == 4) …; )。 我已经测试了所有类型的图像,包括.bmp,其alpha值> 0且<255,并且仍然报告False 。 任何人都使用过它并知道它是否适用于GDI +?