标签: gdi+

GDI + Bitmap保存问题

Bitmap bff(L"1.jpg");
bff.Save(L"2.jpg", &Gdiplus::ImageFormatJPEG, NULL);
Run Code Online (Sandbox Code Playgroud)

这将创建一个具有零字节长度的新文件2.jpg.是不是应该写一个与1.jpg相同的图像文件?

为什么我有零字节长度的文件?我正在进行此测试,因为将其他位图写入文件会产生相同的输出.

c++ winapi gdi+

0
推荐指数
1
解决办法
2万
查看次数

如何使用Win32 AlphaBlend函数绘制32bppargb图像?

我一直在为这个夜晚的大部分时间而烦恼,所以也许你们其中一个人可以帮我一臂之力.

我发现DrawImageC#中的GDI + 对于我想要呈现的内容来说太慢了,从论坛的外观来看,对其他人来说也是如此.

我决定尝试使用AlphaBlendBitBlt从Win32 API获得更好的性能.无论如何,我已经让我的图像显示得很好,除了一个小细节 - 无论我使用什么图像格式,我都无法让白色背景从我的(透明)图形中消失.

到目前为止,我已经尝试过BMP和PNG格式,并验证它们在C#中加载为32bppargb图像.

这是我正在做的电话:

// Draw the tile to the screen.
Win32GraphicsInterop.AlphaBlend(graphicsCanvas, destination.X, destination.Y, this.TileSize, this.TileSize,
                                this.imageGraphicsPointer, tile.UpperLeftCorner.X, tile.UpperLeftCorner.Y,
                                this.TileSize, this.TileSize,
                                new Win32GraphicsInterop.BLENDFUNCTION(Win32GraphicsInterop.AC_SRC_OVER, 0,
                                                                                   Convert.ToByte(opacity * 255),
                                                                                   Win32GraphicsInterop.AC_SRC_ALPHA));
Run Code Online (Sandbox Code Playgroud)

为了记录在案,AC_SRC_OVER0x00AC_SRC_ALPHA0x01这是什么MSDN说,他们应该是一致的.

你们中的任何一个人都能很好地解决这个问题,或者知道一个更好(但仍然很快)的方法吗?

c# graphics winapi gdi+ gdi

0
推荐指数
1
解决办法
2557
查看次数

绘制3D边框

我想使用GDI +绘制3D边框(斜角),例如在a的Paint事件中Control.我应该自己使用DrawLine和/ KnownColors或者有什么东西可以使用吗?

谢谢Saied

.net c# gdi+

0
推荐指数
1
解决办法
3791
查看次数

麻烦绘图图形

我在一个简单的表单上绘制图形时遇到问题.我的代码编译并运行,但目标红框不会显示.

我在Visual Studio 2010中使用完整的.NET Framework 4.

出了什么问题,如何解决?

private void Form1_Load(object sender, EventArgs e)
{
    System.Drawing.Graphics graphicsObj;
    graphicsObj = this.CreateGraphics();
    Pen myPen = new Pen(System.Drawing.Color.Red, 5);
    Rectangle myRectangle = new Rectangle(20, 20, 250, 200);
    graphicsObj.DrawRectangle(myPen, myRectangle);
}
Run Code Online (Sandbox Code Playgroud)

编辑:工作但代码慢

    void BatteryPaint(object sender, EventArgs e)
    {
        TabPage page = (TabPage)sender;
        if (!controlsSetup)
        {
            populateBatteryTab(page);
            controlsSetup = true;
        }
        //Create the items
        Rectangle busBar = new Rectangle();
        Rectangle batPack = new Rectangle();
        Rectangle pack1Outline = new Rectangle();
        Rectangle pack2Outline = new Rectangle();
        Rectangle pack3Outline …
Run Code Online (Sandbox Code Playgroud)

c# gdi+

0
推荐指数
1
解决办法
254
查看次数

GDI - 如何创建和填充位图?

有人可以给我简短的解释如何使用GDI/GDI +创建位图运行时并用颜色填充它?

提前致谢.

c++ windows gdi+ gdi bitmap

0
推荐指数
1
解决办法
2275
查看次数

C#System.InvalidOperationException:Object目前正在其他地方使用

我已经看到了关于同一主题的问题,但无法弄清楚如何解决这个问题.在我的游戏中,我使用两个线程一个Logic线程和UI线程.这是我遇到的问题

System.InvalidOperationException: Object is currently in use elsewhere.
   at System.Drawing.Graphics.FromImage(Image image)
   at GECS.Core.Game.UpdateLoop() in c:\Us....ore\Game.cs:line 82
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()
Run Code Online (Sandbox Code Playgroud)

我只在UI线程上渲染.这是我的渲染循环.我把它放在构造函数中.

while (true) {
    if (!Created) {
        break;
    }
    if (Win32.PeekMessage(out msg, IntPtr.Zero, 0, 0, (uint)Win32.PM.REMOVE)) {
        if (msg.message == (uint)Win32.WindowsMessage.WM_QUIT) {
            break;
        } else {
            Win32.TranslateMessage(ref msg);
            Win32.DispatchMessage(ref msg);
        }
    } else {
        Text = Global.TITLE;
        now = …
Run Code Online (Sandbox Code Playgroud)

c# multithreading gdi+ game-loop

0
推荐指数
1
解决办法
5827
查看次数

使用GDI和GDI +绘制旋转多行文本

在我的Delphi应用程序中,我需要使用GDI和GDI +绘制多行文本.我有这些物品:

  1. 要绘制的文字;
  2. 旋转角度(文字可能旋转);
  3. 最大宽度(想象一下包含文本的矩形,我有矩形宽度的限制但不是矩形高度);
  4. 字体名称和文字高度;

有没有一种简单的方法可以用GDI和GDI +绘制这个文本?我无法找到关于它的GDI和GDI +功能.

delphi text gdi+ gdi multiline

0
推荐指数
1
解决办法
2452
查看次数

处理工作正常,但不是终止

我有一个实现的类IDisposable,因为它使用Bitmap来自GDI +的图像资源(类).我用它来包装所有那些花哨的LockBits/ UnlockBits.它工作正常,无论是我打电话Dispose()还是using声明.

但是,如果我让程序在没有处理的情况下终止,我会得到一个System.AccessViolationException.直观地说,我认为GC将以Dispose与我相同的方式调用,并且该对象将优雅地释放资源,但这不是发生的事情.为什么?


这是IDisposable代码:

private bool _disposing = false;

~QuickBitmap() {
    Dispose(false);
}

public void Dispose() {
    Dispose(true);
    GC.SuppressFinalize(this);
}

private void Dispose(bool safeDispose) {
    if (_disposing)
        return;

    SaveBits(); // private wrapper to UnlockBits
    bytes = null; // byte[] of the image
    bmpData = null; // BitmapData object

    if (safeDispose && bm != null) {
        bm.Dispose(); // Bitmap object
        bm = null; …
Run Code Online (Sandbox Code Playgroud)

c# gdi+

0
推荐指数
1
解决办法
113
查看次数

自定义控件中文本的外发光效果

如何在c#winforms中的Label文本上应用外发光和模糊效果.使用自定义控件

如您所见,这是自定义面板,我正在尝试为整个文本进行发光效果.

protected override void OnPaint(PaintEventArgs pe)
{
    //base.OnPaint(pe);
    StringFormat sf = new StringFormat();
    sf.Alignment = StringAlignment.Center;
    sf.LineAlignment = StringAlignment.Center;

    GraphicsPath GP = new GraphicsPath();
    GP.FillMode = FillMode.Alternate;

    GP.AddString(this.Text, this.Font.FontFamily, 2, 12f, new Point(ClientRectangle.X+Text.Length*4-20, ClientRectangle.Y+10), sf);

    // In Border
    using (SolidBrush brush = new SolidBrush(BackColor))
        pe.Graphics.FillRectangle(brush, ClientRectangle);
    pe.Graphics.DrawRectangle(new Pen(Color.FromArgb(_InnerBorderColor.R, _InnerBorderColor.B, _InnerBorderColor.G), 1.0f), 0, 0, ClientSize.Width - 2, ClientSize.Height - 2);


    pe.Graphics.DrawPath(new Pen(Color.Blue, 2f), GP);
    pe.Graphics.DrawString(base.Text, this.Font, Brushes.Black, 2, 2);

}
Run Code Online (Sandbox Code Playgroud)

c# gdi+ custom-controls winforms

0
推荐指数
1
解决办法
3316
查看次数

Gif闪烁

我正在用c ++ win32 api制作一个窗口。我正在使用gdi +显示gif。并且此gif从资源加载并生成IStream *。但是,当我不使用gif的路径,并使用IStream创建GDIPlus :: Image并将其显示时,gif开始闪烁。PS窗口为SW_SHOWMAXIMIZED

我试图在WM_ERASEBKGND消息中返回1,使得NULL WNDCLASSEX.hbrBackGround,使用InvalidateRect(hwnd,&rc,FALSE)PS rc是

RECT rc;
GetWindowRect(hwnd,&rc);
Run Code Online (Sandbox Code Playgroud)

但这没有用;

case WM_TIMER:
        if (wParam == DRAW_ANIM)
        {
            pImg->SelectActiveFrame(&FrameDimensionTime, nFrm);
            const Rect DRC(0, 0, pImg->GetWidth(), pImg->GetHeight());
            pGphcs->Clear(Color(128, 128, 128));

            pGphcs->DrawImage(pImg, DRC);
            RECT rt;
            GetWindowRect(hwnd, &rt);
            InvalidateRect(hwnd, &rt, FALSE);


            if (nFrm < (nFrmCnt - 1)) nFrm++; else nFrm = 0;

            InvalidateRect(hwnd, &rt, FALSE);
        }

        break;

hMWDC = GetDC(hWnd);
    pGphcs = new Graphics(hMWDC);

    HMODULE hMod = GetModuleHandle(NULL);
    HRSRC hRes = FindResource(hMod, MAKEINTRESOURCEW(MY_GIF_ID), RT_RCDATA);
    if (!hRes) MessageBox(NULL, L"hRes!!", L"ERROR", …
Run Code Online (Sandbox Code Playgroud)

c++ winapi gdi+ animated-gif win32gui

0
推荐指数
1
解决办法
130
查看次数