我正在尝试用C#编写程序,允许用户选择一个文件夹,然后一次一个地显示图像,通过两个按钮(即图片浏览器)的平均值来改变图像。然后,用户可以使用一些控件对当前图像进行一些操作,例如改变颜色,从三个图像的平均颜色创建新图像等。
现在,它运行良好,但我只能使用" OpenFileDialog"一次加载一个图像,使用此代码(http://code.msdn.microsoft.com/wpapps/Image-Edge-Detection-5c5a0dc2/view/Reviews)。
OpenFileDialog ofd = new OpenFileDialog();
ofd.Title = "Select an image file.";
ofd.Filter = "Png Images(*.png)|*.png|Jpeg Images(*.jpg)|*.jpg";
ofd.Filter += "|Bitmap Images(*.bmp)|*.bmp";
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
StreamReader streamReader = new StreamReader(ofd.FileName);
originalBitmap = (Bitmap)Bitmap.FromStream(streamReader.BaseStream);
streamReader.Close();
previewBitmap = originalBitmap.CopyToSquareCanvas(picPreview.Width);
picPreview.Image = previewBitmap;
ApplyFilter(true);
}
我特别想避免的是将所有图像预加载到数组或类似的东西,因为它会占用大量内存。
仅供参考,这就是用于修改图像的代码。
BitmapData sourceData = sourceBitmap.LockBits(new Rectangle(0, 0,
sourceBitmap.Width, sourceBitmap.Height),
ImageLockMode.ReadOnly,
PixelFormat.Format32bppArgb);
byte[] pixelBuffer = new byte[sourceData.Stride * sourceData.Height];
byte[] resultBuffer = new byte[sourceData.Stride * sourceData.Height];
Marshal.Copy(sourceData.Scan0, pixelBuffer, 0, pixelBuffer.Length);
sourceBitmap.UnlockBits(sourceData);
//
// Here would be the image processing
//
Bitmap resultBitmap = new Bitmap(sourceBitmap.Width, sourceBitmap.Height);
BitmapData resultData = resultBitmap.LockBits(new Rectangle(0, 0,
resultBitmap.Width, resultBitmap.Height),
ImageLockMode.WriteOnly,
PixelFormat.Format32bppArgb);
Marshal.Copy(resultBuffer, 0, resultData.Scan0, resultBuffer.Length);
resultBitmap.UnlockBits(resultData);
return resultBitmap;
我已阅读图像列表(http://msdn.microsoft.com/en-us/library/windows/desktop/bb761389%28v=vs.85%29.aspx),但我无法操纵"图像。
因此,简而言之,我如何选择一个文件夹并一次显示一个图像?
感谢您的帮助!