Tag: 位图

从C#中的位图创建一个全新的位图副本

我需要从另一个位图获得位图的深层副本。 现在,大多数解决方案都是这样的 ,这不是一个深层次的副本 。 这意味着当我锁定原始位图时,副本也会被锁定,因为克隆是原始位图的浅表副本 。 现在以下似乎对我有用,但我不确定它是否适用于所有情况。 public static Bitmap GetCopyOf(Bitmap originalImage) { Rectangle rect = new Rectangle(0, 0, originalImage.Width, originalImage.Height); Bitmap retrunImage = new Bitmap(originalImage.Width, originalImage.Height, originalImage.PixelFormat); BitmapData srcData = originalImage.LockBits(rect, ImageLockMode.ReadOnly, originalImage.PixelFormat); BitmapData destData = retrunImage.LockBits(rect, ImageLockMode.WriteOnly, originalImage.PixelFormat); int dataLength = Math.Abs(srcData.Stride) * srcData.Height; byte[] data = new byte[dataLength]; Marshal.Copy(srcData.Scan0, data, 0, data.Length); […]

将Graphics对象转换为Bitmap

我的图形对象确实存在以下问题。 编辑: 我有一个picturebox_image (imageRxTx) ,这是一个来自相机的实时流。 我在绘制事件中所做的是在图像imageRxTx上绘制一些线条(未在下面的代码中显示)。 到目前为止这没有问题。 现在我需要检查imageRxTx中的圆圈,因此我必须使用需要Bitmap作为参数的方法ProcessImage() 。 不幸的是我没有Bitmap图像,而是我的imageRxTx的句柄(hDC) 。 问题 :如何从我的图形对象中获取imageRxTx并将其“转换”为我需要在方法ProcessImage(位图位图)中使用的位图图像 ? 需要在paint-event中连续调用此方法,以便检查我的相机的实时流(imageRxTx)。 这是我的代码: private void imageRxTx_paint(object sender, PaintEventArgs e) { var settings = new Settings(); // Create a local version of the graphics object for the PictureBox. Graphics Draw = e.Graphics; IntPtr hDC = Draw.GetHdc(); // Get a handle to image_RxTx. Draw.ReleaseHdc(hDC); […]

创建BitmapImage WPF

我有一个包含我需要在屏幕上显示的图像数据的ushort [],当我创建一个Windows.System.Drawing.Bitmap,并将其转换为BitmapImage时,这感觉就像一个缓慢无助的方式来做到这一点。 有没有人创建ushort []的BitmapImage的最快方法是什么? 或者从数据中另外创建一个ImageSource对象? 谢谢, 埃蒙·

C#为什么Bitmap.Save会忽略Bitmap的PixelFormat?

我需要处理并保存原始bpp中的图像(1 – 对于BnW,8 – 对于灰色,24 – 颜色)。 处理后我总是有24bpp(由于使用Aforge.Net处理)。 我将原始bpp传递给保存function,我正在使用下一个代码进行保存: private static Bitmap changePixelFormat(Bitmap input, PixelFormat format) { Bitmap retval = new Bitmap(input.Width, input.Height, format); retval.SetResolution(input.HorizontalResolution, input.VerticalResolution); Graphics g = Graphics.FromImage(retval); g.DrawImage(input, 0, 0); g.Dispose(); return retval; } 当我通过时: PixelFormat.Format8bppIndexed 我得到一个例外:“图形对象无法以索引像素格式创建图像”: Graphics g = Graphics.FromImage(retval); 我试过下一个代码: Bitmap s = new Bitmap(“gray.jpg”); Bitmap NewPicture = s.Clone(new Rectangle(0, […]

来自Stream的位图:Bug?

我有一个非常奇怪的错误。 我需要缩小图像,缩小质量并转换为JPEG。 这一切都在我将文件保存在磁盘上时有效,但是当我将其保存到Stream时它不起作用。 System.Drawing.Bitmap bitmap = // valid Bitmap from Disk System.IO.Stream stream = new MemoryStream(); // JPEG Encoding System.Drawing.Imaging.ImageCodecInfo jpgEncoder = GetEncoder( System.Drawing.Imaging.ImageFormat.Jpeg ); System.Drawing.Imaging.Encoder encoder2 = System.Drawing.Imaging.Encoder.Quality; System.Drawing.Imaging.EncoderParameters parameters = new System.Drawing.Imaging.EncoderParameters( 1 ); System.Drawing.Imaging.EncoderParameter parameter = new System.Drawing.Imaging.EncoderParameter( encoder2, qualityLevel ); parameters.Param[0] = parameter; // Save downscaled on Disk and stream bitmap.Save( […]

如何在C#中创建包含多个大小/图像的图标文件

如何创建包含多个尺寸的图标文件? 我知道我使用Icon.FromHandle()从位图创建一个图标但是如何在该图标中添加另一个图像/大小? 编辑:我需要在我的应用程序中执行此操作,因此我无法执行外部应用程序来进行组合。

C#加载JPG文件,解压缩BitmapImage

我试图从JPG中提取BitmapImage。 这是我的代码: FileStream fIn = new FileStream(sourceFileName, FileMode.Open); // source JPG Bitmap dImg = new Bitmap(fIn); MemoryStream ms = new MemoryStream(); dImg.Save(ms, ImageFormat.Jpeg); image = new BitmapImage(); image.BeginInit(); image.StreamSource = new MemoryStream(ms.ToArray()); image.EndInit(); ms.Close(); 图像以0×0图像返回,这当然意味着它不起作用。 我该怎么做呢?

大型基于文件的位图操作库

是否有(优选的开源 – 但不一定)基于文件的位图操作库? 基本function包括获取位图(1-4 GB)的视图(小矩形),更改它并将其保存回来。 我对格式不是特别挑剔(只要它是无损的):BMP,未压缩的Tiff或Targa就好了。 它不一定是全本机代码 – 本机dll的包装将是好的,虽然64位版本将非常受欢迎。

GDI +中发生了一般错误

我使用以下方法将图像加载到Picture Box中: picturebox1.Image = Image.FromFile() 我用以下方法保存它: Bitmap bm = new Bitmap(pictureBox1.Image); bm.Save(FileName, ImageFormat.Bmp); 它在创建新文件时工作得非常好,但是当我尝试替换现有图像时,我会抛出以下运行时错误: GDI +中发生了一般错误 那么我该怎么做才能解决这个问题呢?

如何将图像文件绘制/叠加到位图图像?

我有一个Kinect传感器的video输入,该传感器由存储为位图的图像托管。 我的问题是如何将图像叠加到video源上,例如.png 。 video输入显示如下图所示为位图源,我知道如何在位图上绘制一条线但是如何从资源中绘制图像呢? KinectVideo.Source = BitmapSource.Create(colorFrame.Width, colorFrame.Height, 96, 96, PixelFormats.Bgr32, null, colorData, colorFrame.Width * colorFrame.BytesPerPixel); 下面是通过将图像放在video源上来模拟我想要实现的目标: 更新了绘图方法的实现,我不认为这是正确的实现我在将图像路径添加到.DrawImage时得到无效的参数错误: void myKinect_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e) { using (ColorImageFrame colorFrame = e.OpenColorImageFrame()) { if (colorFrame == null) return; byte[] colorData = new byte[colorFrame.PixelDataLength]; colorFrame.CopyPixelDataTo(colorData); KinectVideo.Source = BitmapSource.Create(colorFrame.Width, colorFrame.Height, 96, 96, PixelFormats.Bgr32, null, colorData, colorFrame.Width * colorFrame.BytesPerPixel); Rect destRect2; […]