相关疑难解决方法(0)

GDI +中发生了一般错误

我使用以下方法将图像加载到Picture Box中:

picturebox1.Image = Image.FromFile()
Run Code Online (Sandbox Code Playgroud)

我用以下方法保存它:

Bitmap bm = new Bitmap(pictureBox1.Image);
bm.Save(FileName, ImageFormat.Bmp);
Run Code Online (Sandbox Code Playgroud)

它在创建新文件时工作得很好,但是当我尝试替换现有图像时,我会抛出以下运行时错误:

GDI +中发生了一般错误

那么我该怎么做才能解决这个问题呢?

c# gdi+ bitmap

19
推荐指数
2
解决办法
5万
查看次数

以编程方式(C#)将Excel转换为图像

我想以编程方式将excel文件转换为图像(每种格式都可以)(c#).目前我正在使用Microsoft Interop Libraries和Office 2007,但默认情况下它不支持保存到图像.

所以我目前的解决方法如下:

  • 使用Microsoft Interop打开Excel文件;
  • 找出最大范围(包含数据);
  • 使用该范围上的CopyPicture(),它将数据复制到剪贴板.

现在棘手的部分(和我的问题):

问题1:

使用.NET Clipboard类,我无法从剪贴板中获取EXACT复制数据:数据是相同的,但不知何故格式化是扭曲的(整个文档的字体似乎变得粗体和多一点他们不是不可读的;); 如果我使用mspaint.exe从剪贴板粘贴,粘贴的图像是正确的(正如我希望的那样).

我反汇编了mspaint.exe并找到了一个正在使用的函数(OleGetClipboard)从剪贴板中获取数据,但我似乎无法在C#/ .NET中使用它.

我尝试的其他东西是剪贴板WINAPI(OpenClipboard,GetClipboardData,CF_ENHMETAFILE),但结果与使用.NET版本相同.

问题2:

使用范围和CopyPicture,如果Excel工作表中有任何图像,这些图像不会与周围数据一起复制到剪贴板.

一些源代码

Excel.Application app = new Excel.Application();
app.Visible = app.ScreenUpdating = app.DisplayAlerts = false;
app.CopyObjectsWithCells = true;
app.CutCopyMode = Excel.XlCutCopyMode.xlCopy;
app.DisplayClipboardWindow = false;

try {
    Excel.Workbooks workbooks = null;
    Excel.Workbook book = null;
    Excel.Sheets sheets = null;

    try {
        workbooks = app.Workbooks;
        book = workbooks.Open(inputFile, false, false, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
                              Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
                              Type.Missing, Type.Missing);
        sheets = book.Worksheets; …
Run Code Online (Sandbox Code Playgroud)

c# excel clipboard interop image

10
推荐指数
2
解决办法
2万
查看次数

标签 统计

c# ×2

bitmap ×1

clipboard ×1

excel ×1

gdi+ ×1

image ×1

interop ×1