如何将图像从位图放入图片框中
是否可以从内存(byte[]或stream或Bitmap)加载图片而不保存到磁盘? 这是我用来将byte[]数组变成Bitmap的代码: unsafe { fixed (byte* ptr = Misc.ConvertFromUInt32Array(image)) { Bitmap bmp = new Bitmap(200, 64, 800, PixelFormat.Format32bppRgb, new IntPtr(ptr)); bmp.RotateFlip(RotateFlipType.Rotate180FlipX); bmp.MakeTransparent(Color.Black); bmp.Save("test.bmp"); } } 而不是使用Bmp.save(),我可以将Bitmap放在我的表格上的图片框中吗? 解决方案 您是否尝试过? pictureBox.
0 2024-04-17
编程技术问答社区
从RGB ints到Hex的转换
我拥有的是r:255 g:181 b:178,我在C#中工作(为WP8更具体) 我想将其转换为将其用作颜色的十六进制号(以设置可写入的Pixel颜色).我正在做的是以下内容: int hex = (255 > 16)); // = 0 int g = ((byte)(hex >> 8)); // = 0 int b = ((byte)(hex >> 0)); // = 255 解决方案 尝试以下: using System.Drawing; Color myColor = Color.FromArgb(255, 181, 178); string hex = myColor.R.ToStr
0 2024-04-17
编程技术问答社区
如何在Visual Studio调试器中查看位图对象?
我正在构建一个C#应用程序,该应用会创建许多位图(System.Drawing.Image).将其视为图片中的位图将有很大的帮助.调试器对XML文件具有本机支持.有办法看图片吗? 解决方案 默认情况下没有debugger可视化器,因此您可能需要尝试一下:其他解决方案 在Visual Studio 2019中起作用的另一个开源图像和位图可视化器: https://github.com/jaex/jaex/imagevisalizer 屏幕截图: 其他解决方案 我在阅读雷切尔的评论之前就这样做了,这要容易得多. 您可以base64对其进行编码 - 在您的直接窗口中: System.IO.MemoryStream stream = new System.IO.MemoryStream(); yourImage.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp); byte[] bytes = str
0 2024-04-17
编程技术问答社区
将一个位图保存到MemoryStream中
我应该分配内存还是仅仅是内存流的对象: 这还可以吗? MemoryStream memoryStream = new MemoryStream(); bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg); 如果我需要定义内存大小,我该如何从位图获得? 解决方案 .NET是一个管理的环境:具体来说,内存分配通常由.NET运行时代表您管理.您通常不需要自己分配内存. 有时,当您使用Close()或Dispose()完成内存时,您确实需要通知运行时. using语句可以用来包装MemoryStream之类的资源来告诉运行时可以回收内存. 其他解决方案 您不需要预先计算内存. 您可以使用memoryStream.Length. 获得大小 完成了memoryStream需要的工作后,请确保将其处置(或将其全部包装在using语句中).
0 2024-04-17
编程技术问答社区
如何用纯色填充一个位图?
我需要使用唯一的RGB颜色创建一个24位位图(分辨率100x100像素),然后将生成的图像保存到磁盘中.我目前使用 SetPixel 功能,但它非常慢. Bitmap Bmp = new Bitmap(width, height); //... //... Bmp.SetPixel(x,y,Color.FromARGB(redvalue, greenvalue, bluevalue)); 是否有比SetPixel更快的方法? 解决方案 这应该做您需要的事情.它将用指定的颜色填充整个位图. Bitmap Bmp = new Bitmap(width, height); using (Graphics gfx = Graphics.FromImage(Bmp)) using (SolidBrush brush = new SolidBrush(Color.FromArgb(redvalue, greenvalue, bluevalue))) { gfx.Fil
0 2024-04-17
编程技术问答社区
位图的字节[]大小与BMP内存流大小不同
我正在尝试通过TCP/IP连接发送位图.到目前为止,我的程序员应尽其所能.但是在调试期间,我发现了我的位图字节的奇怪价值[]. 我打开了24位位图并将其转换为16位.位图为800x600,因此字节[]的长度应为800*800*2byte = 960000 byte ...但是我的数组是960054 ... 额外的字节来自哪里? Console.WriteLine("Bitmap auf 16Bit anpassen...\n"); Rectangle r = new Rectangle(0,0,bitmap_o.Width, bitmap_o.Height); Bitmap bitmap_n = bitmap_o.Clone(r, PixelFormat.Format16bppRgb555); bitmap_n.Save("test2.bmp"); Console.WriteLine("N
0 2024-04-17
编程技术问答社区
Bitmap.Maketransparent函数的不同结果
我的问题是我想使图像背景透明.而且以下功能对我来说很好,但是在另一台机器上测试时,我发现有很多人工制品颜色,透明度并不像我的机器和其他机器上的那样清晰. 我正在使用调试构建,并在发布版本上进行了测试.但是,即使有发布构建,我们也会在不同的机器上看到不同的结果. Image CreateTransparentBackgroundImage(Image image) { using (Bitmap tempBitmap = new Bitmap(image.Width, image.Height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb)) { var g = Graphics.FromImage(tempBitmap); Rectangle rec = new Rectangle(0 ,0,im
0 2024-04-17
编程技术问答社区
C# 多线程中的Bitmap LockBits/UnlockBits
我正在从事一个CCTV项目,该项目采用了ONVIF.我使用的是由" ONVIF设备管理器"项目提供的Winform样本,以从相机获取视频帧. (您可以找到它在这里).我发现该示例使用dispatcher.begininvoke()将copymemory()块代码放入UI线程中.我会慢慢降低主UI线程,因为重复此块以在图片框中显示图像. void InitPlayback(VideoBuffer videoBuffer, bool isInitial) { //.... var renderingTask = Task.Factory.StartNew(delegate { var statistics = PlaybackStatistics.Start(Restart, isInitial); using (videoBuffer.Lock()) {
0 2024-04-17
编程技术问答社区
移除一个位图的黑色背景颜色
我需要在C#VS2013中删除位图的黑色背景颜色. 就像我在画布上提取一些要点一样. 帆布是黑色的,我只需要更改画布透明同时,在没有任何更改的情况下将五颜六色的点保持在上面. 我得到了解决方案: 如何从bitmap 中删除白色背景颜色 Bitmap capcha = new Bitmap(@"C:/image.png"); capcha.MakeTransparent(Color.Black); 但是,背景仍然具有灰色,例如覆盖图像上点的雾. 如何删除它? 更新 我使用了代码: ImageAttribute imageAttribute = new ImageAttribute(); imageAttribute.SetGamma(0.5f, ColorAdjustType.Bitmap); gr.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height), 0, 0,
0 2024-04-17
编程技术问答社区
改变PixelFormat的位图深度拷贝
Bitmap img = new Bitmap("C:\\temp\\images\\file.jpg"); img.pixelformat是格式化24bpprgb 当我进行深层复制 时 Bitmap img2 = new Bitmap(img); img.pixelformat已更改为格式化32bppargb 为什么它会更改像素格式?以及如果对象不制作深层副本,如何制作深层副本? 解决方案 您可以像这样克服位图,这将创建一个深层副本: Bitmap img = new Bitmap("C:\\temp\\images\\file.jpg"); // Clone the bitmap. Rectangle cloneRect = new Rectangle(0, 0, img.Width, img.Height); System.Drawing.Imaging.PixelFormat format = img.PixelFormat; Bi
0 2024-04-17
编程技术问答社区
在c#中,当在picturebox中绘制trains时出现内存不足的异常
我正在尝试创建一个显示在 picturebox 的在线火车的应用程序 为了实现此目的,我创建了一个worker thread来获得在线火车位置.因此,我可以在此处看到该线程: private Thread workerThread = null; private delegate void UpdateListBoxDelegate(); private UpdateListBoxDelegate UpdateListBox = null; in Form_load我称之为这些: UpdateListBox = new UpdateListBoxDelegate(this.UpdateStatus); // Initialise and start worker thread workerThread = new Thread(new ThreadStart(this.GetOnlineTrain
0 2024-04-17
编程技术问答社区
Bitmap.Save,巨大的内存泄漏
我有一个应用程序,我正在使用gzipstream进行位图并将其压缩,然后将其通过插座发送,全部在内存中.我已将肮脏的卑鄙记忆泄漏跟踪到以​​下行: frame.Save(inStream, jpegCodec, parameters); 浏览良好的信息高速公路,我发现了许多关于图像类泄漏内存中的主题,这些主题是在各种编解码器上的保存方法中泄漏.问题是我真的没有找到任何修复.所以我的问题如下: 导致此 的原因 我该如何修复此 这是我的Framestream类中的完整写入()方法. /// /// Writes a frame to the stream /// /// The frame to write public void Write(Bitmap frame) { using (EncoderParamete
0 2024-04-17
编程技术问答社区
我如何将.png文件转换为位图?对我来说没有任何作用。错误"'解码图像失败。所提供的图像必须是位图。 '" Xamarin.forms
我在xamarin.forms的一部分中使用 Xamarin 我需要将文件(" image.png")转换为位图,因为当项目运行其输入时,请在"断路模式"中运行其输入并向我展示此消息" java.lang.illegalgumentException:'未能解码映像.提供的图像必须是位图.'".因此,我尝试以许多方式转换文件: 1_使用来自System.Drawing.bitMap的方法,但它显示了此例外"此操作在此平台中不支持此操作" 2_无法使用android.graphics,因为我在xamarin.forms中工作不在xamarin.android中. 3_我尝试将" image.png"转换为base64或byte []数组,然后转换为位图,但是问题与第一个问题相同,因为要从字节[] array或base64转换为bitmap我使用System.drawing.bitmap的方法. 4_我尝试使用库Skiasharp,但我没有成功,因为我没有找到有关如何
0 2024-04-17
编程技术问答社区
Java到C#的转换。我如何在我的位图上画一个矩形?
首先,我在c#和java上都是一个完整的菜鸟. 所以我已经得到了这项任务将Java小程序转换为C#,除了使用鼠标事件在屏幕上绘制矩形外,我设法做了所有事情. . 应该发生的事情是,当我单击并将鼠标拖到屏幕上时,应该出现一个没有填充和白色边框的矩形.我下面的代码只是一个白色屏幕,如果我在Form1_paint中评论IF(action)语句,则它可以工作,但没有矩形,因此必须是将其弄乱的代码. [更新] 我现在已经显示了一个矩形,但是它发生在鼠标up事件上,而不是在拖动鼠标时创建它.显而易见的下一步是将其移至其他鼠标事件,例如Mousemove,但是随着我使其更大,它确实会弄乱并不断地创建矩形.当我拖动鼠标而不继续创建矩形时,我该如何使其不断调整矩形大小? 代码 private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g1 = e.Graphics;
0 2024-04-17
编程技术问答社区
如何在xamarin.android中把图像转换成base64?
我有此代码,它在Android Studio中效果很好,但在Xamarin中效果很好 bitmap.compress()在Xamarin中有不同的参数,我很困惑如何将图像转换为base64或xamarin.android中的二进制? 我在第三行中收到错误: (bitmap.compress()有一些无效的参数). Bitmap bitmap = BitmapFactory.DecodeResource(Resources, Resource.Drawable.ace1); ByteArrayOutputStream bao = new ByteArrayOutputStream(); bitmap.Compress(Bitmap.CompressFormat.Jpeg, 100,bao); byte[] ba = bao.ToByteArray(); string bal = Base64.EncodeToString(ba, Base64.Default); 解决
0 2024-04-17
编程技术问答社区
C#位图/图形的内存不足
我正在尝试拍摄整个屏幕的快照以读取像素值.实际上,我正在做任何问题.但是完全214个快照之后,我已经摆脱了记忆例外. Bitmap ScreenShot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); public Bitmap TakeSnapshot() { Graphics graphic = null; Rectangle rect = new Rectangle(0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); using (graphic = Graphics.FromImage(ScreenShot)) { graphic.CopyFromScreen(Screen.Prima
0 2024-04-17
编程技术问答社区
实现IDisposable C#
我有点麻烦理解IDisposable接口 我正在开发游戏引擎,并在我的解决方案上进行了代码分析,并被告知要在我的" grapicsengine"类上实现Idisposable界面,因为它包含一个位图实例. 自然,我搜索了互联网,以了解如何正确执行此操作并提出以下代码: 这是我的班级成员: private const int BITMAP_WIDTH = 4096; private const int BITMAP_HEIGHT = 4096; private Graphics backBuffer; private Bitmap bitmap; private Color clearColor; private WindowSurface surface; private GraphicsQuality quality; private Viewport viewport; 这是我的Idispoable地区: #region IDisposab
0 2024-04-17
编程技术问答社区
创建大于23k x 23k的巨大的高分辨率位图
我想创建一个巨大的分辨率位图像图像,以便将其加载到内存中并根据用户查看. 我注意到new Bitmap(int32,int32);的限制约为23000,但我需要大约1159480 x 45920,bitdeptth为32. 有人可以帮助我,还是不可能做到这一点?我有8次RAM. 解决方案 您真的确定需要这样的尺寸吗?它应该大于 150GB .此外,如果您考虑1/72英寸的点大小,则图像将为 409 km 500 m ... 编辑如果您需要一个大区域的高分辨率图像,则应考虑使用多个分辨率的多个图像(例如,考虑Google Map).
0 2024-04-17
编程技术问答社区
在c#中把一个字符串转换成一个位图
我想将字符串转换为位图或可以在Pixelbox中显示的内容. 我的字符串看起来像这样: string rxstring = "010010010020020020030030030040040040050050050060060060070070070080080080090090090100100100110110110120120120130130130140140140150150150160160160“ 在字符串中删除RGB代码 ("01002003004005060070080090100110120130140150160"); 我只需要显示,这不是重要的[sic] IDE:VS2010 C# 解决方案 在继续进行审查后,我意识到您的弦即可获得的字符串不是字节数组.这会创建一个方形图,并让您通过像素来设置值像素. List splitBytes = new List(); string byteS
0 2024-04-17
编程技术问答社区
如何将透明的PNG加载到位图并忽略alpha通道
我看到了许多有关如何使用alpha通道加载PNG并显示它的问题,但是没有关于如何加载具有Alpha通道但忽略Alpha通道的PNG,揭示了基础的RGB数据. . 我尝试过简单地删除Alpha通道中的所有数据,但是我只是获得了黑色像素,而不是我想要的颜色数据.从我创建位图对象的那一刻起,它似乎不包含Alpha为0的像素中的任何颜色信息,尽管我向您保证,信息在png中实际上存在. 要清楚,如果我的图像包含一个具有以下值的像素:(R:255 g:128 B:128 A:0)我需要该像素为(R:255 G:128 B:128 B:128 A:128 A:255 ),不是(r:0 g:0 b:0 a:255). 谢谢 编辑:以前的信息不正确.使用时,位图包含所有信息: Bitmap myImage = Bitmap("filename.png"); 我做错了什么,然后使用: Bitmap otherImage = Bitmap(myImage); 看来
0 2024-04-17
编程技术问答社区