Image.FromStream()在图像处理时发出C#
我正在使用JPG图像类型,这一行Image.FromStream()在图像处理时发出C#,c#,imaging,C#,Imaging,我正在使用JPG图像类型,这一行image=image.FromStream(ms)给出错误参数无效。 这个代码有什么问题 private void button3_Click(object sender, EventArgs e) { Image partial=null; Rectangle bounds; Guid id; if (diff != null)
image=image.FromStream(ms)代码>给出错误参数无效
。
这个代码有什么问题
private void button3_Click(object sender, EventArgs e)
{
Image partial=null;
Rectangle bounds;
Guid id;
if (diff != null)
{
ImageConverter converter = new ImageConverter();
var data = (byte[])converter.ConvertTo(diff, typeof(byte[]));
UnpackScreenCaptureData(data, out partial, out bounds,out id);
Image imgfirst = (Image)firstImg;
UpdateScreen(ref imgfirst, partial, bounds);
}
}
public static void UnpackScreenCaptureData(byte[] data, out Image image, out Rectangle bounds, out Guid id)
{
// Unpack the data that is transferred over the wire.
// Create byte arrays to hold the unpacked parts.
const int numBytesInInt = sizeof(int);
int idLength = Guid.NewGuid().ToByteArray().Length;
int imgLength = data.Length - 4 * numBytesInInt - idLength;
byte[] topPosData = new byte[numBytesInInt];
byte[] botPosData = new byte[numBytesInInt];
byte[] leftPosData = new byte[numBytesInInt];
byte[] rightPosData = new byte[numBytesInInt];
byte[] imgData = new byte[imgLength];
byte[] idData = new byte[idLength];
// Fill the byte arrays.
Array.Copy(data, 0, topPosData, 0, numBytesInInt);
Array.Copy(data, numBytesInInt, botPosData, 0, numBytesInInt);
Array.Copy(data, 2 * numBytesInInt, leftPosData, 0, numBytesInInt);
Array.Copy(data, 3 * numBytesInInt, rightPosData, 0, numBytesInInt);
Array.Copy(data, 4 * numBytesInInt, imgData, 0, imgLength);
Array.Copy(data, 4 * numBytesInInt + imgLength, idData, 0, idLength);
// Create the bitmap from the byte array.
MemoryStream ms = new MemoryStream(imgData, 0, imgData.Length);
ms.Write(imgData, 0, imgData.Length);
image = Image.FromStream(ms);
....
}
我认为您必须将内存流
重置为位置0。
您可以通过调用内存流上的Seek()
方法来实现这一点:
MemoryStream ms = new MemoryStream(imgData, 0, imgData.Length);
ms.Write(imgData, 0, imgData.Length);
ms.Seek(0, SeekOrigin.Begin); // Set stream position to 0.
image = Image.FromStream(ms);
抛出的异常是什么?当这一行“image=image.FromStream(ms);”执行时,我得到错误,错误消息是“Parameter is not valid”。我认为有一个很小的错误,我无法理解。到底什么是差异?它来自哪里?我试着比较两张jpg图片。第一个jpg图像存储在第一个IMG变量中,第二个jpg图像存储在第二个IMG变量中,两个图像之间的差异存储在差异变量中。同样,这没有任何意义:MemoryStream ms=new MemoryStream(imgData,0,imgData.Length);ms.Write(imgData,0,imgData.Length)代码>从数组创建流,然后再将该数组写入流?@Thomas:您是否比较了imgLength、topPosData、,。。。和原来的一样?我认为我们确实需要更多的代码来帮助您。我认为这个答案不正确。imgData被写入同一个流两次。