Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
- Bitmap MakeBW(Bitmap source)
- {
- //использование промежуточных переменных ускоряет
- //код в несколько раз
- var width = source.Width;
- var height = source.Height;
-
- var sourceData = source.LockBits(new Rectangle(new System.Drawing.Point(0, 0), source.Size),
- ImageLockMode.ReadOnly,
- source.PixelFormat);
-
- result = new Bitmap(width, height, source.PixelFormat);
- var resultData = result.LockBits(new Rectangle(new System.Drawing.Point(0, 0), result.Size),
- ImageLockMode.ReadWrite,
- source.PixelFormat);
-
-
- var sourceStride = sourceData.Stride;
- var resultStride = resultData.Stride;
-
- var sourceScan0 = sourceData.Scan0;
- var resultScan0 = resultData.Scan0;
-
- var resultPixelSize = resultStride / width;
-
- unsafe
- {
- for(var y = 0 ; y < height ; y++)
- {
- var sourceRow = (byte*)sourceScan0 + (y * sourceStride);
- var resultRow = (byte*)resultScan0 + (y * resultStride);
- for(var x = 0 ; x < width ; x++)
- {
- var v =(byte)(0.3*sourceRow[x*resultPixelSize + 2] + 0.59*sourceRow[x*resultPixelSize + 1] +
- 0.11*sourceRow[x*resultPixelSize]);
- resultRow[ x * resultPixelSize ] = v;
- resultRow[ x * resultPixelSize + 1 ] = v;
- resultRow[ x * resultPixelSize + 2 ] = v;
- }
- }
-
-
- }
-
- source.UnlockBits(sourceData);
- result.UnlockBits(resultData);
- return result;
- }
* This source code was highlighted with Source Code Highlighter.
BitmapData resultData = result.LockBits(new System.Drawing.Rectangle(new System.Drawing.Point(0, 0), result.Size),
ImageLockMode.ReadWrite,
System.Drawing.Imaging.PixelFormat.Format32bppArgb);
* This source code was highlighted with Source Code Highlighter.
MonoDevelop 2.0 has been released. See the official announcement here.
March 30, 2009
Манипулируем System.Drawing.Bitmap