Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用图形、C#时没有足够的内存存储图片

使用图形、C#时没有足够的内存存储图片
EN

Stack Overflow用户
提问于 2018-12-12 21:15:32
回答 2查看 254关注 0票数 0

代码非常简单:我按下按钮,图片就会加载到PictureBox中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    private void button1_Click(object sender, EventArgs e)
{
        using (FileStream stream = File.OpenRead(FullName))
        {
            pictureBox1.Image = (Bitmap)Bitmap.FromStream(stream).Clone();
            stream.Close();
            stream.Dispose();
        }
}

但是当我在其他函数\事件中使用PictureBox'e上的图形时,它发誓说Graphics.FromImage上没有足够的内存。不管我怎么处理这个时间表。示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    using (Graphics g = Graphics.FromImage(pictureBox1.Image))
{
    g.Clear(Color.FromArgb(0, 255, 255, 255));
    pictureBox1.Invalidate();
}

问题是,为什么在将图片上传到PictureBox之前,我可以使用Graphics做任何我想做的事情:剪切、填充、绘制;但在上传图片之后,我不能这样做?附注:图片尝试了不同的尺寸。同样的图片在上传之前有效(它已经在默认的pictureBox中),并且在上传到pictureBox之后不起作用。走了相当多的论坛关于这个主题,但我的案例(或最相似的案例)找不到。

EN

回答 2

Stack Overflow用户

发布于 2018-12-13 10:18:15

所以问题出现在Graphics.FromImage使用的流中。Documentation说,从Graphics.FromImage打开的流必须在处理图像的整个过程中保持打开。好的,我们可以使用MemoryStream:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    MemoryStream ms;

private void button1_Click(object sender, EventArgs e)
{

    ms = new MemoryStream();
    using (FileStream stream = File.OpenRead(FullName))
    {
        stream.CopyTo(ms);
        pictureBox1.Image = Bitmap.FromStream(ms);
    }
}        


private void button2_Click(object sender, EventArgs e)
{
    using (Graphics g = Graphics.FromImage(pictureBox1.Image))
    {
        g.Clear(Color.FromArgb(0, 255, 255, 255));
    }     
}

和image.Clone()需要删除,因为为了正确的工作,流必须具有对相同图像的引用,而不是对其副本的引用。(老实说,简单的程序员不需要MemoryStream也能工作)

票数 1
EN

Stack Overflow用户

发布于 2018-12-13 09:58:41

您有3种选择:

1)在不克隆的情况下分配Image.FromStream()结果: PictureBox控件更喜欢在基础流上独立操作(请参阅.Net Source about the PictureBox.Load()方法)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void button1_Click(object sender, EventArgs e)
{
    using (FileStream stream = File.OpenRead(FullName))
    {
        pictureBox1.Image = Bitmap.FromStream(stream);
    }
    using (Graphics g = Graphics.FromImage(pictureBox1.Image))
    {
        g.Clear(Color.FromArgb(0, 255, 255, 255));
    }
}  

2)执行using块内的所有操作。此时,该流仍然有效:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using (FileStream stream = File.OpenRead(FullName)
{
    pictureBox1.Image = (Image)Image.FromStream(stream).Clone();
    using (Graphics g = Graphics.FromImage(pictureBox1.Image))
    {
        g.Clear(Color.FromArgb(0, 255, 255, 255));
    }
}

3)直接使用Load()方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    pictureBox1.Load(FullName);

所有方法最终都将使用PictureBox控件内部InstallNewImage() (.Net源)方法。查看图像stream是如何处理的。

调用Graphics.FromImage()将不再引发异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53751461

复制
相关文章
dotnet C# 如何使用 MemoryFailPoint 检查是否有足够的内存资源来执行操作
在 dotnet 里面的 MemoryFailPoint 可用来测试当前进程是否还能分配申请给定大小的内存空间,这个是一个高级编程的类型,大部分情况下都不需要用到。本文内容由 New Bing 编写,将和大家介绍 MemoryFailPoint 的使用方法
林德熙
2023/05/28
8270
SQLite的使用——图片存储
在上篇有说到SQLite的文本存储,文本的增删改查,在本篇中主要说SQLite对单张图片的存储。
全栈程序员站长
2022/09/14
1.9K0
R python在无图形用户界面时保存图片
在用python的matplotlib,和R中自带的作图,如果想保存图片时,当你有图形用户界面时是没有问题的,但是当没有图形用户界面时,会报错: 在R中,解决办法: https://blog.csdn.net/LongBless/article/details/6373291 在python中,解决办法: 在导入matplotlib的其他包之前,写以下语句:   import matplotlib   matplotlib.use('Agg')
Echo_fy
2018/07/06
9780
如何使用HBase存储图片
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.文档编写目的 ---- Fayson在前面的文章中介绍了《如何使用HBase存储文本文件》和《如何使用Lily HBase Indexer对HBase中的数据在Solr中建立索引》,实现了文本文件保存到HBase中,并基于Solr实现了文本文件的全文检索。如果我们碰到的是图片文件呢,该如何保存或存储呢。本
Fayson
2018/07/12
3.7K0
只要内存足够大,IO足够快,序列比对照样可以跑很快
序列比对是NGS数据分析中比较耗时,复杂度较高的一步,李恒所写的bwa mem已普遍用于各种临床应用中的序列比对一步,但性能应用于临床检测还需进一步提升。
用户7625144
2022/04/15
1.6K0
只要内存足够大,IO足够快,序列比对照样可以跑很快
第二章 计算机使用内存来记忆或存储计算时所使用的数据内存如何存放数据
由一个或多个连续的字节组成(8 bit = 1 byte) 带宽 10M bit per second,实际计算的是byte
酱紫安
2021/05/07
1.4K0
第二章
    





        计算机使用内存来记忆或存储计算时所使用的数据内存如何存放数据
使用python时注意的内存、缓存问题
1. 在使用python时,常常会出现Memory Error,主要是由于python不会自动回收内存,造成内存一直占用,可以采取手动释放内存的方法,详见http://blog.csdn.net/nirendao/article/details/44426201/。
py3study
2020/01/09
2K0
Redis 内存使用优化与存储
转载自:https://www.cnblogs.com/_popc/p/5968683.html
天涯泪小武
2019/07/02
8300
gin——使用腾讯云存储图片
一、腾讯云对象存储COS 1. 创建储存桶 然后直接下一步-创建即可。 2. API密钥创建 3. 查看代码中需要的东西 储存桶名称Bucket、所属地域Region 密钥APPID、SecretId、SecretKey 二、代码 1. 配置文件conf.toml 这里读取配置文件的第三方库是Viper,学习可以查看:viper库快速使用 将上面查看的几个值写入配置文件对应位置即可 [tencentCOS] # TencentCloud 腾讯云
传说之下的花儿
2023/04/16
9.3K1
gin——使用腾讯云存储图片
高盛CEO:没有足够背景的孩子如何逆袭
世界上最大的投资银行高盛集团CEO,贝兰克梵因带领高盛集团成功走出2008年金融危机而为人所熟知。贝兰克梵1954年出生于纽约布鲁克林的一个贫民区,父亲是一个普通的邮件分拣员。
IT阅读排行榜
2018/08/15
3050
高盛CEO:没有足够背景的孩子如何逆袭
C#使用MemoryStream类读写内存
MemoryStream和BufferedStream都派生自基类Stream,因此它们有很多共同的属性和方法,但是每一个类都有自己独特的用法。这两个类都是实现对内存进行数据读写的功能,而不是对持久性存储器进行读写。
zls365
2020/08/19
3K0
C#使用MemoryStream类读写内存
float的内存存储
十进制->二进制 eg:十进制数10转换二进制 10/2=5········0 5/2 = 2······1 2/2 = 1·····0 1/2 = 0······1 所以10的二进制为1010 float->二进制 8.25 整数部分与上面一样 8/2=4···0 4/2 = 2···0 2/2 = 1···0 1/2 = 0···1 8->1000(b) 0.25->二进制 0.25*2 = 0.5 <1 0 0.5*2 = 1.0 = 1 1 所以8.25 = 1000.01 = 1.00001*2^3
用户7272142
2023/04/12
7060
BerkeleyDB .je 在作为存储时的简单使用
最近在研究BDB时发现速度特别快(非关系型数据库)下面我给大家共享一下我在学习的过程中的一些收获和问题,不知道哪位大神帮忙解决一下。主要在putNoDupData,不知道该怎么使用
用户5166556
2019/04/16
1.4K0
Facebook的图片存储
为了减少对昂贵的存储解决方案(诸如NetApp和Akamai,我所在的单位用了一套NetApp,性能和稳定性都不错,价格当然也不菲),Facebook在2009年4月的时候推出了一套新的,名为Haystack的图片存储系统,来一个对每个月85亿次的图片上传(每天500G)。
大江小浪
2018/07/25
2K0
Facebook的图片存储
图片存储
官方文档:https://developer.qiniu.com/kodo/1239/java
阿贾
2021/02/18
1.7K0
使用码云作为图片存储库
平时写文章的时候,经常会在内容里面插入一些图片,之前一直用路过图床,一款免费的图片托管服务器,但是老是莫名其妙少一些图片,所以想着能不能白嫖一下码云来存储图片,网上搜了下,非常简单,看下面操作 1、第一步 码云创建仓库 记住这个位置一定要选开源,不然放到博客里的链接,别人打不开 2、第二步 上传图片文件 将上传后的照片路径中的blob改为raw就可以使用了
裴大头
2022/01/17
1.6K0
使用码云作为图片存储库
求int型正整数在内存中存储时1的个数
题目描述 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。 输入描述: 输入一个整数(int类型) 输出描述: 这个数转换成2进制后,输出1的个数 示例1 输入 5 输出 2 #include <bits/stdc++.h> using namespace std; int main() { int num; cin>>num; int floors = log(num)/log(2)+1; int counts = 0; for(int
Kindear
2019/12/16
6030
使用Nginx+Memcached的小图片存储方案
今天整理存储的时候发现80多台服务器上都有一个计划任务,每分钟从管理后台把图片同步至本地。我统计了下使用一年多了只占用很少了空间,图片数量也很少,大小平均在10K左右。
星哥玩云
2022/06/28
5780
开始使用腾讯云 COS 存储图片
目前为止,我一直使用 Github 来存储图片。该方案可靠免费,但毕竟不是 Github 的本来用法,属于「滥用服务」的违规使用。此前一直使用该方案的主要原因,就是 Github 与 jsdelivr 的组合在中国表现良好,而且完全免费。
Clouder0
2022/09/23
3.3K0
【SAP技巧】SAP没有图形访问BDS的权限
Activity 03 Business Document Service: Class name DEVC_STXD_BITMAP Business Document Service: Class type 0T
matinal
2020/11/13
1.1K0
【SAP技巧】SAP没有图形访问BDS的权限

相似问题

Leadtools没有足够的内存

26

纱线MapReduce没有足够的内存

12

Malloc没有分配足够的内存

10

删除行没有足够的内存

111

图片图形用户界面C# (使用图片框)

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文