Отлаживая рендеринг изображения в Visual C++, каких-либо полезных дополнениях?

Яйца являются довольно хорошим способом распределить приложения Python. Думайте о нем как о независимом от платформы .deb файле, который установит все зависимости и этажерку. Преимущество состоит в том, что это просто в использовании для конечного пользователя. Недостаток - то, что это может быть громоздким для упаковки приложения как .egg файла.

необходимо также предложить альтернативное средство установки в дополнение к .eggs. Существуют некоторые люди, которым не нравится использовать яйца, потому что им не нравится идея программы, устанавливающей любое программное обеспечение, которое она хочет. Они обычно имеют тенденцию быть типами системного администратора.

5
задан Jacob 11 October 2009 в 06:24
поделиться

5 ответов

Such a thing exists:

A utility for simple printf-style debugging of images in Win32 C/C++ applications.

http://billbaxter.com/projects/imdebug/

My coworker raves about it.

--chris

3
ответ дан 14 December 2019 в 13:41
поделиться

Мой коллега написал эту статью CodeProject для написания визуализаторов отладчика

http://www.codeproject.com/KB/showcase/BuildDebuggerVisualizer.aspx

Он использует наш продукт, набор инструментов для создания образов .NET, но его можно легко адаптировать для использования вместо этого классов изображений .NET.

1
ответ дан 14 December 2019 в 13:41
поделиться
  1. Создайте класс, содержащий ваш буфер + метаданные (ширина, высота, шаг, формат пикселей).
  2. Добавьте методы ToStream () и FromStream () в свой класс для (де) сериализации изображения ( буфер и метаданные).
  3. Добавьте ToWpfBitmapSource () в свой класс.
  4. Создайте визуализатор отладки, который десериализует ваше изображение из потока, преобразует его в BitmapSource WPF, помещает в элемент управления Image на хосте Winforms WPF.

Этот пример поможет: http://www.codeproject.com/KB/WPF/WPF_Glimps.aspx

Класс может быть добавлен в C ++ CLI в отдельной DLL.

0
ответ дан 14 December 2019 в 13:41
поделиться

Я отказался от своего старого ответа, поскольку он не имел отношения к делу. В новой версии также используется OpenCV (поскольку я пытаюсь отобразить изображение OpenCV), но ее можно адаптировать к любой платформе.

Код ядра - это то место, где он принимает адрес памяти адрес и количество байтов для чтения через numrows , numcols и byte_size и считывает эти байты в буфер. Я уверен, что вы можете адаптировать эту часть кода для своих нужд.

#include "stdafx.h"
#include <windows.h>
#include <cv.h>
#include <highgui.h>
#include <iostream>

using namespace std;
using namespace cv;

void imshow_debug(const LPCVOID address, const int numrows, const int numcols, const int type, const int byte_size, const int step, const string windows_title)
{
    // Initialize
    unsigned long PID; 
    SIZE_T read_bytes = 0;

    // Allocate space for the image
    const int bytes_to_read = numrows*numcols*byte_size;
    uchar *image_data = new uchar[bytes_to_read];
    Mat Image(numrows,numcols,type,image_data,step);

    // Get the handle and PID
    HWND handle = FindWindowA(0, windows_title.c_str());
    if (!FindWindowA(0, windows_title.c_str())) 
    { 
        printf("Window %s not found!", windows_title); 
        exit(0); 
    }
    GetWindowThreadProcessId(handle, &PID);  /* Get windows PID from a window handle */
    HANDLE WindowsProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, false, PID);

    // Read the image
    ReadProcessMemory(WindowsProcessHandle,address,image_data,bytes_to_read,&read_bytes);   
    if(bytes_to_read != read_bytes) 
    {
        cout<<"Could not read entire image"<<endl; 
        exit(0);
    }

    // Display the image
    namedWindow("Image");
    imshow("Image",Image);
    waitKey();

    // Clean up
    CloseHandle(WindowsProcessHandle);
    delete[]image_data;
}

int main(int argc, char* argv[])
{
    imshow_debug((LPVOID)0x03af0370,300,300,CV_64F,sizeof(double),2400,"C:\\Documents and Settings\\jacobm\\My Documents\\Visual Studio 2005\\Projects\\Head\\debug\\SSR_VideoComp.exe");
    return 0;
}
0
ответ дан 14 December 2019 в 13:41
поделиться

То, о чем вы просите, естественным образом невозможно реализовать в родном C ++. Вся технология визуализации внутри визуального отладчика организована вокруг CLR, следовательно, либо C #, либо C ++ / CLI.

Единственное, что может помочь в родной стране, - это механизм надстройки вычислителя выражений . Конечно, он предназначен для возврата строки и удаления, но это код, поэтому теоретически вы можете запустить любой код, включая отображение окна и отображение данных, которые вам нужны (после прочтения их из отлаживаемого кода).

Это немного обидно, когда эти замечательные функции отсутствуют в нативной части.

1
ответ дан 14 December 2019 в 13:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: