viewing paste Unknown #6932 | C

Posted on the
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
 
    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;
    }
 
 
Viewed 710 times, submitted by Guest.