irr::video::ITexture* CSkinUnitODL::GetTextureData() { Gdiplus::BitmapData data; auto uLen = GetSkinWidth()+GetGroutX(); auto vLen = GetSkinHeight()+GetGroutY(); Gdiplus::Rect rect(0,0, static_cast<int>(uLen), static_cast<int>(vLen)); GetBitmapData(&rect, Gdiplus::ImageLockModeRead, PixelFormat32bppARGB, data); irr::core::dimension2du texSize(data.Width, data.Height); auto img = IrrEngine::GetInstance()->GetDevice()->getVideoDriver()->createImageFromData(irr::video::ECF_A8R8G8B8, texSize, data.Scan0, false, false); auto addr = reinterpret_cast<int>(data.Scan0); auto tex = IrrEngine::GetInstance()->GetDevice()->getVideoDriver()->addTexture(std::to_string(addr).c_str(), img); img->drop(); ReleaseBitmapData(data); return tex; }
void BitmapSource::Invalidate () { if (GetPixelWidth () == 0 || GetPixelHeight () == 0) return; if (native_surface) { cairo_surface_destroy (native_surface); native_surface = NULL; } if (image_surface) cairo_surface_destroy (image_surface); image_surface = cairo_image_surface_create_for_data ((unsigned char *) GetBitmapData (), CAIRO_FORMAT_ARGB32, GetPixelWidth (), GetPixelHeight (), GetPixelWidth () * 4); Emit (BitmapSource::PixelDataChangedEvent); }
gpointer WriteableBitmap::InitializeFromBitmapSource (BitmapSource *source) { cairo_t *cr; if (!source) return NULL; SetPixelHeight (source->GetPixelHeight ()); SetPixelWidth (source->GetPixelWidth ()); image_surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, GetPixelWidth (), GetPixelHeight ()); cr = cairo_create (image_surface); cairo_set_source_surface (cr, source->GetImageSurface (), 0, 0); cairo_paint (cr); cairo_destroy (cr); SetBitmapData (cairo_image_surface_get_data (image_surface), false); return GetBitmapData (); }
void CBsplineView::OnGen() { // TODO: Add your command handler code here CBsplineDoc* pDoc = GetDocument(); Gdiplus::BitmapData m_TempBitmapData; GetBitmapData(m_TempBitmapData,pDoc->m_pOrignImageS); if (pDoc->m_Gui) { delete pDoc->m_Gui; } pDoc->m_Gui=new CPupilGUI((BYTE*)m_TempBitmapData.Scan0, m_TempBitmapData.Width, m_TempBitmapData.Height); /* pDoc->m_LipContour_left=new CLipContour((BYTE*)m_TempBitmapData.Scan0, m_TempBitmapData.Width, m_TempBitmapData.Height,true); pDoc->m_LipContour_right=new CLipContour((BYTE*)m_TempBitmapData.Scan0, m_TempBitmapData.Width, m_TempBitmapData.Height,false);*/ pDoc->m_pOrignImageS->UnlockBits(&m_TempBitmapData); /* if (m_controlpoint.size()<2) { MessageBox("请输入两个以上的控制顶点"); return; } int i; CDC*pDC=GetDC(); CPen pen1; CPen *oldPen; pen1.CreatePen(PS_DASH,1,RGB(0,0,255));//创建对象 oldPen = pDC->SelectObject(&pen1);//将画笔选入设备描述表,并保存旧的画笔 for (i=0;i<m_controlpoint.size()-1;i++) { pDC->MoveTo(m_controlpoint[i][0],m_controlpoint[i][1]); pDC->LineTo(m_controlpoint[i+1][0],m_controlpoint[i+1][1]); } CPen pen2; pen2.CreatePen(PS_DASH,3,RGB(0,0,255));//创建对象 pDC->SelectObject(&pen2);//将画笔选入设备描述表,并保存旧的画笔 CLibsvm csvm; csvm.TrainModel(m_controlpoint); float minx=1e10; float maxx=0; for (int i=0;i<m_controlpoint.size();i++) { if (m_controlpoint[i][0]<minx) { minx=m_controlpoint[i][0]; } if (m_controlpoint[i][0]>maxx) { maxx=m_controlpoint[i][0]; } } m_resultcurve.clear(); for (int i=minx;i<maxx;i++) { float y=0; csvm.Predict(i,y); m_resultcurve.push_back(vec2(i,y)); }*/ /* bcurve.Computeinterpolation(); for(i=0;i<bcurve.m_interpolationnode.size()-1;i++) { pDC->MoveTo(bcurve.m_interpolationnode[i][0],bcurve.m_interpolationnode[i][1]); pDC->LineTo(bcurve.m_interpolationnode[i+1][0],bcurve.m_interpolationnode[i+1][1]); }*/ Invalidate(); //pDC->SelectObject(oldPen); }
std::pair<BYTE*, UINT> Picture::GetAllData() { auto size = GetPixels(); WICRect rect = { 0,0,static_cast<INT>(size.first),static_cast<INT>(size.second) }; return GetBitmapData(rect); }