CResim::CResim(void)
{
BitmapVeri = NULL;
pResimDosyaBaslik = NULL;
pVeriBasligi= NULL;
hBitmap = NULL;
}
CResim::CResim(HBITMAP _hBitmap)
{
BitmapVeri = new Byte();
pResimDosyaBaslik = NULL;
hBitmap =_hBitmap;
ResimYukle();
}
CResim::CResim(Byte& _BitmapVeri)
{
BitmapVeri = NULL;
pResimDosyaBaslik = NULL;
pVeriBasligi = NULL;
hBitmap = NULL;
ResimCiz(_BitmapVeri);
}
CResim::~CResim(void)
{
if(BitmapVeri != NULL)
this->BitmapVeri->Kaldir();
if(hBitmap != NULL)
DeleteObject(hBitmap);
delete BitmapVeri;
}
bool CResim::ResimYukle()
{
if(GetObject(hBitmap,sizeof(Resim),(PResim)this))
{
DWORD ResimBoyutu = ((Genislik * PixelBits + 31 ) / 32) * 4 * Yukseklik;
BitmapVeri->YeniOlustur(sizeof(BitmapVeriBaslik) + ResimBoyutu);
pVeriBasligi = (BitmapVeriBaslik*) (void*)*BitmapVeri;
pVeriBasligi->strBoyut = sizeof(BitmapVeriBaslik);
pVeriBasligi->Genişlik = this->Genislik;
pVeriBasligi->Yukseklik = this->Yukseklik;
pVeriBasligi->Yuzeyler = YuzeyAdet;
pVeriBasligi->BitAdet = PixelBits;
pVeriBasligi->SikistirmaTipi = BI_RGB;
pVeriBasligi->ResimBoyutu = ResimBoyutu;
HDC DC = GetDC(NULL);
HDC MEMDC = CreateCompatibleDC(DC);
if(MEMDC != NULL) {
char* Buffer = (char*)pVeriBasligi;
Buffer = Buffer + pVeriBasligi->strBoyut;
GetDIBits(MEMDC,hBitmap,0,Yukseklik,Buffer,(LPBITMAPINFO)pVeriBasligi,DIB_RGB_COLORS);
DeleteDC(MEMDC);
ReleaseDC(NULL,DC);
return true;
}
}
return false;
}
bool CResim::ResimCiz(Byte& Veri)
{
// Verinin Basinda BitmapDosyaBasligi Her Zaman BitmapDosyaBasligi var.
pResimDosyaBaslik = (BitmapDosyaBasligi*)&Veri;
// BitmapDosyaBasligi Altında Ise BitmapDosyaBilgileri yer alıyor. Baslangic+BitmapDosyaBasligi = BitmapDosyaBilgileri
pVeriBasligi = (BitmapVeriBaslik*) ( &Veri+ (sizeof(BitmapDosyaBasligi)) ) ;
// -> CResim Sinifina ait ResimVeri Butun Dosya Verilerini Tutuyor.(Baslik+ DosyaBilgileri + Veri)
BitmapVeri = &Veri;
// Resim veri baslangic adresini Buffer pointerina aktar.
void* Buffer = (char*)Veri + pResimDosyaBaslik->VeriOffset;
// Resim yaratildiktan sonra RenkTablosunu alabilmek icin gerekli structure
BitmapBilgiler bilgiler;
hBitmap = CreateDIBitmap(GetDC(NULL),(LPBITMAPINFOHEADER)pVeriBasligi,CBM_INIT,Buffer,(LPBITMAPINFO)&bilgiler,DIB_RGB_COLORS);
if(hBitmap != NULL)
{
Genislik = pVeriBasligi->Genişlik;
Yukseklik = pVeriBasligi->Yukseklik;
PixelBits = pVeriBasligi->BitAdet;
YuzeyAdet = pVeriBasligi->Yuzeyler;
bmiColor[1] = bilgiler.ColorTable[1];
return true;
}
return false;
}
Byte* CResim::ByteCevir()
{
return NULL;
}
CResim::operator HBITMAP()
{
return hBitmap;
}