[ C# ] 씨샵 Bitmap To ByteArray 변환 및 설명
1. 필수 using
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
2. Bitmap 이미지 불러오기
using(Bitmap bitmap = new Bitmap(@"C:\Users\Heo\Downloads\IMAGE.jpg"))
{
}
3. BitmapToByteArray 함수 만들기
public byte[] BitmapToByteArray(Bitmap bitmap)
{
BitmapData bitmapData = null;
try
{
// 이미지 락모드
bitmapData = bitmap.LockBits(
new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadOnly, bitmap.PixelFormat);
// 이미지 길이
int nByteCount = bitmapData.Stride * bitmap.Height;
byte[] byteArray = new byte[nByteCount];
// 이미지 메모리 시작점
IntPtr inPtr = bitmapData.Scan0;
// 메모리에 복사
Marshal.Copy(inPtr, byteArray, 0, nByteCount);
return byteArray;
}
finally
{
if (bitmapData != null)
bitmap.UnlockBits(bitmapData);
}
}
4. ImageLockMode
메서드를 읽거나 픽셀 데이터를 쓸 수 있도록 이미지의 부분을 잠금
5. 전체 소스
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace WindowsFormsApp_BitmapToByteArray
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
using(Bitmap bitmap = new Bitmap(@"C:\Users\Heo\Downloads\IMAGE.jpg"))
{
byte[] byteArray = BitmapToByteArray(bitmap);
}
}
public byte[] BitmapToByteArray(Bitmap bitmap)
{
BitmapData bitmapData = null;
try
{
// 이미지 락모드
bitmapData = bitmap.LockBits(
new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadOnly, bitmap.PixelFormat);
// 이미지 길이
int nByteCount = bitmapData.Stride * bitmap.Height;
byte[] byteArray = new byte[nByteCount];
// 이미지 메모리 시작점
IntPtr inPtr = bitmapData.Scan0;
// 메모리에 복사
Marshal.Copy(inPtr, byteArray, 0, nByteCount);
return byteArray;
}
finally
{
if (bitmapData != null)
bitmap.UnlockBits(bitmapData);
}
}
}
}
==========
댓글
댓글 쓰기