Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2013, 10:50   #1
LOST94
Пользователь
 
Регистрация: 13.05.2009
Сообщений: 47
По умолчанию c# и bitblt

Продолжаю пробовать разные способы вывести спрайт на форму в visual studio 2010 c#. Т к gdi+ оказался нереально медленным, и по directX из-за переделок версий сложно найти нормальный современный учебник, переключаемся на win api
Такой вопрос, есть ли у кого-то проект\код, который просто выводит картинку из файла по заданным координатам на форму \ другую картинку? Это элементарно звучит, и за 2 минуты делается в делфи, в c# уже 2 недели не могу решить задачу. Пожалуйста, не проходите мимо

Есть еще код, скопированный с другого сайта. green.jpg добавлен в папку с екзешником, picturebox1 добавлен, все компилируется и запускается, но форма все равно остается пустой после вызова draw()

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace BitbltSprites3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Draw();
        }
        private void Draw()
        {
            using (Bitmap bmp = (Bitmap)Bitmap.FromFile("green.jpg"))
            using (Graphics grDest = Graphics.FromHwnd(pictureBox1.Handle))
            using (Graphics grSrc = Graphics.FromImage(bmp))
            {
                IntPtr hdcDest = IntPtr.Zero;
                IntPtr hdcSrc = IntPtr.Zero;
                IntPtr hBitmap = IntPtr.Zero;
                IntPtr hOldObject = IntPtr.Zero;

                try
                {
                    hdcDest = grDest.GetHdc();
                    hdcSrc = grSrc.GetHdc();
                    hBitmap = bmp.GetHbitmap();

                    hOldObject = SelectObject(hdcSrc, hBitmap);
                    if (hOldObject == IntPtr.Zero)
                        throw new Win32Exception();

                    if (!BitBlt(hdcDest, 0, 0, pictureBox1.Width, pictureBox1.Height,
                        hdcSrc, 0, 0, 0x00CC0020U))
                        throw new Win32Exception();
                }
                finally
                {
                    if (hOldObject != IntPtr.Zero) SelectObject(hdcSrc, hOldObject);
                    if (hBitmap != IntPtr.Zero) DeleteObject(hBitmap);
                    if (hdcDest != IntPtr.Zero) grDest.ReleaseHdc(hdcDest);
                    if (hdcSrc != IntPtr.Zero) grSrc.ReleaseHdc(hdcSrc);
                }
            }
        }

        [DllImport("gdi32.dll", EntryPoint = "SelectObject")]
        public static extern System.IntPtr SelectObject(
            [In()] System.IntPtr hdc,
            [In()] System.IntPtr h);

        [DllImport("gdi32.dll", EntryPoint = "DeleteObject")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool DeleteObject(
            [In()] System.IntPtr ho);

        [DllImport("gdi32.dll", EntryPoint = "BitBlt")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool BitBlt(
            [In()] System.IntPtr hdc, int x, int y, int cx, int cy,
            [In()] System.IntPtr hdcSrc, int x1, int y1, uint rop);
    }
}
LOST94 вне форума Ответить с цитированием
Старый 25.06.2013, 16:08   #2
LOST94
Пользователь
 
Регистрация: 13.05.2009
Сообщений: 47
По умолчанию

частично решил проблему dll-кой на делфи :D впервые хоть что-то заработало )
LOST94 вне форума Ответить с цитированием
Старый 25.06.2013, 16:46   #3
Радик29
Пользователь
 
Регистрация: 26.12.2012
Сообщений: 90
Радость

Цитата:
Сообщение от LOST94 Посмотреть сообщение
частично решил проблему dll-кой на делфи :D впервые хоть что-то заработало )
Продолжайте дальше, я вижу, у вас есть успехи
Радик29 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
BitBlt прозрачное рисование Alex Cones Общие вопросы Delphi 2 29.06.2010 19:38
BitBlt, вывод изображения zotox Win Api 5 22.04.2010 21:43
BitBlt из памяти на экран Марин Win Api 6 25.01.2010 00:50
BitBlt ZotaC Gamedev - cоздание игр: Unity, OpenGL, DirectX 14 16.01.2010 19:04
BitBlt на контекст DC и его альтернатива notHaker Мультимедиа в Delphi 7 03.12.2009 01:04