请考虑以下代码来加载,修改和保存位图图像:
using (Bitmap bmp = new Bitmap("C:\\test.jpg"))
{
bmp.RotateFlip(RotateFlipType.Rotate180FlipNone);
bmp.Save("C:\\test.jpg");
}
Run Code Online (Sandbox Code Playgroud)
它运行没有任何异常.但考虑一下:
using (Bitmap bmp = new Bitmap("C:\\test.jpg"))
{
using (Bitmap bmpClone = (Bitmap)bmp.Clone())
{
//You can replace "bmpClone" in the following lines with "bmp",
//exception occurs anyway
bmpClone.RotateFlip(RotateFlipType.Rotate180FlipNone);
bmpClone.Save("C:\\test.jpg");
}
}
Run Code Online (Sandbox Code Playgroud)
它以ExternalException结束,并显示以下消息:"GDI +中发生了一般错误".这有什么不对?打开文件的任何类型的锁定?如果是这样,为什么第一个块有效?克隆System.Drawing.Bitmap的正确代码是什么,而我们可能需要在内存中编辑主对象或其克隆,并且仍然将它们都加载到内存中?
尝试创建一个针对快速扫描仪优化的图像采集应用程序(可以为每张纸提供最多6个压缩图像[颜色+灰色+二进制] [前+后],速度为150 ppm)我有一些速度问题.使用TWAIN技术和内存缓冲区传输模式(TWSX_MEMORY)我从扫描仪接收图像缓冲区(作为内存中加载的JPEG或TIFF文件)并将其保存到我的应用程序目标路径.如果我不想创建缩略图,我的应用程序不会导致扫描仪的速度损失,但如果我愿意,由于我这样做(将缓冲区保存到我的C++ TWAIN处理dll中的文件中,通知我的.NET主机应用程序使用函数指针的目标文件路径,在C#中打开图像文件并创建缩略图图像),我的应用程序导致极速的速度损失扫描速度.我尝试了一些优化,例如在单独的线程中执行加载阶段,并将非托管图像文件缓冲区发送到.NET主机,并尝试在不安全的上下文(UnmanagedMemoryStream)中加载它并创建缩略图.但它没有显着提高速度.所以我的问题是:
在内存中有一个图像文件缓冲区(例如24位JPEG压缩而没有嵌入缩略图),是否有快速直接的方法从中创建缩略图?在这种情况下,您建议什么是创建缩略图的最快方法?
我必须检查一些表中是否存在具有特定条件的记录,这些记录可能不存在,我必须在标量函数中执行此操作.
这是我的代码:
CREATE FUNCTION CheckIfRecordsExistInTestTable()
RETURNS INT
BEGIN
DECLARE @Result INT
SELECT @Result =
CASE WHEN OBJECT_ID('TestTable') IS NULL THEN 0
ELSE
CASE WHEN EXISTS(SELECT * FROM TestTable) THEN
1
ELSE
0
END
END
RETURN @Result
END
Run Code Online (Sandbox Code Playgroud)
在SQL Server中尝试执行以下语句时:
SELECT dbo.CheckIfRecordsExistInTestTable()
Run Code Online (Sandbox Code Playgroud)
只要TestTable
存在,它就会返回我的预期结果.但是,每当它没有,SQL Server引发异常(无效的对象名称' TestTable
'),我无法得到我所期望的(我希望在这种情况下返回零值).那么你打算为这个可编码为标量函数的问题做些什么呢?
bitmap ×1
c# ×1
c++ ×1
clone ×1
exception ×1
jpeg ×1
sql-server ×1
t-sql ×1
thumbnails ×1
tiff ×1