BitBlt-что не так
когда беру изображение из пиктура все работает нормально а когда использую image рисует черный квадратик
2)Graphics g = Graphics.FromImage(im);//im-картинка она загружается правильно это точно
IntPtr hdc = this.CreateGraphics().GetHdc();
Graphics t = this.CreateGraphics();
t.Clear(Color.White);
i++;
if (i > 2) i %= 3;
BitBlt(hdc, p.X , p.Y , 23, 33, Hdc, 23 * i, 33 * str, SRCCOPY);
Graphics t = this.CreateGraphics();
есть аналоги дотнетовские для этого.
я не про два раза спрашивал.это мои индуские заморочки)))))
можете сказать почему hdc из картинки не создается а из пиктура создается верней посему не работает правильно(((
можете сказать почему hdc из картинки не создается а из пиктура создается верней посему не работает правильно(((
IntPtr hdc = this.CreateGraphics().GetHdc(); // создаем графикс и получаем хдц, прежний графикс благополучно уничтожается GC
Graphics t = this.CreateGraphics(); // создаем какойто другой графикс
t.Clear(Color.White);
i++;
if (i > 2) i %= 3;
BitBlt(hdc, p.X , p.Y , 23, 33, Hdc, 23 * i, 33 * str, SRCCOPY);
Image im2 = Image.FromFile("2.gif");
Image im3 = Image.FromFile("3.gif");
Bitmap Bit = new Bitmap(this.Width, this.Height);
Graphics g =Graphics.FromImage(Bit);
for(int i=0;i<mapI;i++)
for (int j = 0; j < mapJ; j++)
{
switch (mapa[i, j])
{
case 1:
{
g.DrawImage(im1, i * 30, j * 30, 30, 30);
} break;
case 2:
{
g.DrawImage(im2, i * 30, j * 30, 30, 30);
} break;
case 3:
{
g.DrawImage(im3, i * 30, j * 30, 30, 30);
} break;
}
}
IntPtr Hdc = this.CreateGraphics().GetHdc();
IntPtr hdc = g.GetHdc();
BitBlt(Hdc, 0, 0, this.Width , this.Height , hdc, 0, 0, SRCCOPY);
g.Dispose();
кто нибудь может сказать почему у меня черный экран рисует а не картинку
static extern IntPtr CreateCompatibleDC(IntPtr hdc);
[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
static extern bool DeleteDC(IntPtr hdc);
[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobj);
[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
static extern bool DeleteObject(IntPtr hObject);
и поменял
IntPtr pSource = CreateCompatibleDC(pTarget);
IntPtr pOrig = SelectObject(pSource, Bit.GetHbitmap());
BitBlt(pTarget, 0, 0, 500,500, pSource, 0, 0, SRCCOPY);
IntPtr pNew = SelectObject(pSource, pOrig);
DeleteObject(pNew);
DeleteDC(pSource);
e.Graphics.ReleaseHdc(pTarget);
начало работать))) а теперь скажите что я сделал???
Вы лучше скажите зачем вообще используете GDI напрямую в C#
а как надо???
раскажите
я пытаюсь отрисовать кусок карты 11 на 11 ячеек на весь экран.
экран будет заблокирован от изменения размера.двумерный масив служит картой и в нем хранятся значения поверхностей(пол стены ямы и прочее) пытался рисовать чисто gdi+ но все так сильно мигало что никуда не годится.двойную буферизацию пробовал не помогло. вот BitBlt вроде побыстрей будет но вот ничего не выходит проктически.в google по запросу "BitBlt" уже до 6 странице дошел глухо как в танке.
Если ты дошёл в гугле до конца первой страницы и ничего не нашёл, то в 90% случаев это значит, что ты спрашивал не то, что хотел найти (или искал не то, что спрашивал - смотря по настроению).
.
я месяца два назад поднимал тему на чем писать мне сказали не мучайся с DirectX используй GDI+.сейчас время нет уже(((
Graphics[COLOR="Black"]::[/COLOR]DrawImage(Image*,INT,INT) чем не подходит?