برای اینکه شما بتوانید فایل های تصویری Bitmap یا پسوند BMP را در برنامه نویسی نمایش دهید ابتدا باید بایتهای فایل را بخوانید.
public class Image_Loading
{
یک متغیر از نوع سایز برای اینکه سایز عکس را در آن قرار دهیم.
public Size ImageSize;
یک متغیر از نوع عکس(Bitmap) برای اینکه بایت های فایل را پیکسل به پیکسل فراخوانی و در آن قرار دهیم.
Bitmap MyBit;
پروسیجر زیر فایل (FileName) را گرفته و بایت های آنرا فراخوانی و عکس(Bitmap)به ما تحویل خواهد داد.
public Bitmap Bitmap_Reader(string FileName)
{
شرط زیر نشان میدهد که فایل داده شده وجود دارد یا خیر(برای جلوگیری از بروز خطا)
if (File.Exists(FileName))
{
متغیر FileByteبرای اینکه تمام بایت های FileNameرا در آن قرار دهیم.
byte[] FileByte = (byte[])File.ReadAllBytes(FileName);
متغیر BitmapXبرای قرار دادن سایز افقی عکس می باشد که این به صورت معادله ریاضی می باشد یعنی:
بایت شماره 18+ (بایت شماره 19 * 255)+ بایت شماره 19
دقت کنید که این اندازه به صورت پیکسل می باشد.
متغیر BitmapYبرای قرار دادن سایز عمودی عکس می باشد که این به صورت معادله ریاضی می باشد یعنی:
بایت شماره 22+ (بایت شماره 23 * 255)+ بایت شماره 23
و به صورت پیکسل.
int BitmapX = FileByte[18] + (FileByte[19] * 255) + FileByte[19],
BitmapY = FileByte[22] + (FileByte[23] * 255) + FileByte[23];
اولین بایت فایل نشان میدهد که آیا فایل از نوعBitmap هست یا خیر در صورت اینکه اولین بایت برابر با 66 باشد.
if (FileByte[0] != 66)
{
MessageBox.Show("File Format Not Suport", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
FileByte = null;
MyBit = null;
return MyBit;
}
try
{
MyBit = new Bitmap(BitmapX + 1, BitmapY + 1);
}
catch (Exception)
{
MessageBox.Show("File Format Not Suport", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
FileByte = null;
MyBit = null;
return MyBit;
}
متغیر زیر برای رنگ یک پیکسل می باشد.
Color PixColor = new Color();
این متغیر در صورتی که درست باشد خواندن پیکس ها شروع می شود.
bool ADDPIX = false;
دو متغیر زیر نشان دهنده این است که کدام پیکسل باید رنگی شود.
int SPiX = 0;
int SPiY = BitmapY - 1;
ImageSize = MyBit.Size;
for (int I = 0; I < FileByte.Length; I++)
{
if (ADDPIX)
{
try
{
در فایل های Bitmap به صورت سه بایت سه بایت رنگ پیکسل ها مشخص می شود که در زیر فراخوانی می شوند و در متغیر PixColor ریخته میشوند.
PixColor = Color.FromArgb(FileByte[I + 2], FileByte[I + 1], FileByte[i]);
}
catch (Exception) { break; }
I += 2;
SPiX++;
}
از بایت 53 خواندن پیکسل ها شروع می شود.
if (I == 53)
ADDPIX = true;
if (SPiY < 0)
break;
ریختن رنگ در پیکسل مشخص شده.
MyBit.SetPixel(SPiX, SPiY, PixColor);
if (SPiX == BitmapX)
{
SPiY--;
SPiX = 0;
شرط های زیر برای این می باشد که همه فایل های Bitmapشبیه هم نیستند. که بایت 35 نشان دهنده مدل آن است.
if (FileByte[35] == 8)
I += 2;
else if (FileByte[35] == 181)
I += 1;
else if (FileByte[35] == 224 || FileByte[35] == 133 || FileByte[35] ==213)
I += 3;
}
}
FileByte = null;
}
return MyBit;
}
}
دانلود پروژه:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید