c语言图像处理改为并行,我可以将图像处理与PLINQ并行吗?

我想将一个图像的alpha通道与其他图像进行比较。我的比较方法是这样的:我可以将图像处理与PLINQ并行吗?

public static unsafe double Similiarity (Bitmap a, Bitmap b)

{

BitmapData aData = a.LockBits (

new Rectangle (0, 0, a.Width, a.Height),

System.Drawing.Imaging.ImageLockMode.ReadOnly, a.PixelFormat);

BitmapData bData = b.LockBits (

new Rectangle (0, 0, b.Width, b.Height),

System.Drawing.Imaging.ImageLockMode.ReadOnly, b.PixelFormat);

int PixelSize = 4;

double sum = 0;

for (int y=0; y

byte* aRow = (byte *)aData.Scan0 + (y * aData.Stride);

byte* bRow = (byte *)bData.Scan0 + (y * bData.Stride);

for (int x=0; x

byte aWeight = aRow [x * PixelSize + 3];

byte bWeight = bRow [x * PixelSize + 3];

sum += Math.Abs (aWeight - bWeight);

}

}

a.UnlockBits (aData);

b.UnlockBits (bData);

return 1 - ((sum/255)/(a.Width * a.Height));

}

我认为加速计算是通过使用PLINQ最简单的方法:

var list = from Bitmap img in imageList.AsParallel where (Similiarity (referenceImage, img) > 0.5) select img;

但在执行中有gdiplus一个例外:

System.InvalidOperationException: The operation is invalid [GDI+ status: Win32Error]

at System.Drawing.GDIPlus.CheckStatus (Status status) [0x00000] in :0

at System.Drawing.Bitmap.LockBits (Rectangle rect, ImageLockMode flags, PixelFormat format, System.Drawing.Imaging.BitmapData bitmapData) [0x00000] in :0

我知道gdiplus必须在不同的进程中执行,但我认为PLINQ正在这样做。我的假设有什么问题?

2012-06-28

Rodja

+0

PLINQ不使用不同的工艺来执行。它使用线程。 –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值