728x90
반응형
728x170
▶ MainForm.cs
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : Form
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
Bitmap sourceBitmap = Bitmap.FromFile("image.jpg") as Bitmap;
Bitmap targetBitmap = sourceBitmap.Clone() as Bitmap;
ProcessBitmap(targetBitmap);
this.sourcePictureBox.Image = sourceBitmap;
this.targetPictureBox.Image = targetBitmap;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 비트맵 처리하기 - ProcessBitmap(targetBitmap)
/// <summary>
/// 비트맵 처리하기
/// </summary>
/// <param name="targetBitmap">타겟 비트맵</param>
private void ProcessBitmap(Bitmap targetBitmap)
{
int targetBitmapWidth = targetBitmap.Width;
int targetBitmapHeight = targetBitmap.Height;
BitmapData targetBitmapData = targetBitmap.LockBits
(
new Rectangle(0, 0, targetBitmapWidth, targetBitmapHeight),
ImageLockMode.ReadWrite,
PixelFormat.Format24bppRgb
);
int targetBitmapStride = targetBitmapData.Stride;
IntPtr scan0Handle = targetBitmapData.Scan0;
unsafe
{
byte* pointer = (byte*)(void*)scan0Handle;
Parallel.For
(
0,
targetBitmapHeight,
y => {
Parallel.For
(
0,
targetBitmapWidth,
x => {
int position = y * targetBitmapStride + x * 3;
pointer[position + 2] = 0;
}
);
}
);
}
targetBitmap.UnlockBits(targetBitmapData);
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > TPL' 카테고리의 다른 글
[C#/TPL] CancellationToken 클래스 : 태스크 실행 취소하기 (0) | 2019.11.23 |
---|---|
[C#/TPL] Task 클래스 : WhenAll 정적 메소드 사용하기 (0) | 2019.11.23 |
[C#/TPL] TaskFactory 클래스 : FromAsync 메소드를 사용해 비동기 프로그래밍 모델 실행하기 (0) | 2019.11.23 |
[C#/TPL] TaskCompletionSource 클래스 : 동기 방식을 비동기식으로 구현하기 (0) | 2019.08.01 |
[C#/TPL] Task 클래스 : 비동기 처리하기 (0) | 2019.07.31 |
[C#/TPL] Parallel 클래스 : For 정적 메소드 사용하기 (0) | 2019.07.13 |
[C#/TPL] Parallel 클래스 : ForEach 정적 메소드 사용하기 (0) | 2019.06.30 |
[C#/TPL] Parallel 클래스 : ForEach 정적 메소드를 사용해 디렉토리 크기 구하기 (0) | 2018.10.01 |
[C#/TPL] Parallel 클래스 : For 정적 메소드를 사용해 디렉토리 크기 구하기 (0) | 2018.09.13 |
[C#/TPL] Task 클래스 : 스로틀링(Throttling) 처리하기 (0) | 2017.09.09 |
댓글을 달아 주세요