|
You last visited: Today at 23:34
Advertisement
Pixel scan
Discussion on Pixel scan within the C/C++ forum part of the Coders Den category.
07/25/2013, 16:29
|
#1
|
elite*gold: 0
Join Date: Aug 2011
Posts: 1,190
Received Thanks: 549
|
Pixel scan
Hey, weiß jemand evtl. wie man mit einer Form einen bestimmten Pixel Bereich eines externen Programm's[Game] abspeicher könnte und dann in der Form anzeigen oder direkt vom anderen Programm die Pixel auf die Form übertragen könnte?
Falls ihr es nicht verstanden habt, hier noch mal in Bilder:
z.B. so ein Ausschnitt aus einem Spiel auslesen mit einer Form
und dann in der Form wiedergeben
Hoffe einer weis wie oder ob das gehen würde^.
|
|
|
07/25/2013, 17:19
|
#2
|
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
|
Google -> how to make a screenshot in c++
Quote:
Use GetDC(NULL); to get a DC for the entire screen.
Use CreateCompatibleDC to get a compatible DC.
Use CreateCompatibleBitmap to create a bitmap to hold the result.
Use SelectObject to select the bitmap into the compatible DC.
Use BitBlt to copy from the screen DC to the compatible DC.
Deselect the bitmap from the compatible DC.
|
|
|
|
07/26/2013, 11:39
|
#3
|
elite*gold: 0
Join Date: Dec 2009
Posts: 29
Received Thanks: 3
|
Da dein Topic Pixel scan heist
->
Quote:
// Eine Bitmap von dem erstellen was du grade sehen kannst
Bitmap myBitmap = Win32APICall.GetDesktop();
//jetzt kannst du von dem bildschirm den bereich auslesen den du haben magst
for (int x = startposX; x < endposX; x++)
for(int y = startposY; y < endposY; y++)
auschnitt.setPixel(x-startpos, y-startpos,myBitmap.getPixel(x,y));
|
hab den Code nicht getestet aber in der Richtung dürftest du eine Bitmap mit deinem schnipsel vom Bildschirm erstellen können. wie du die Koordinaten und die Größe herbekommst sei deine Sache.
ps: die Bitmap kannst du einfach in die Picture laden
pictureBox1.setImage(BITMAP);
|
|
|
07/26/2013, 21:29
|
#4
|
elite*gold: 0
Join Date: Aug 2011
Posts: 1,190
Received Thanks: 549
|
Ok, hab soweit alles, es wird ein Bild alle 100ms erstellt und auch angezeigt aber nur das erst erstellte Bild die picturebox updatet sich nicht, selbst wenn es in einer while schleife geschieht, weis wer Rat?
|
|
|
07/26/2013, 22:47
|
#5
|
elite*gold: 0
Join Date: Jun 2013
Posts: 63
Received Thanks: 4
|
Quote:
Originally Posted by marbra1
Ok, hab soweit alles, es wird ein Bild alle 100ms erstellt und auch angezeigt aber nur das erst erstellte Bild die picturebox updatet sich nicht, selbst wenn es in einer while schleife geschieht, weis wer Rat?
|
Zeig deinen Code, dann könnte man dir weiterhelfen.
|
|
|
07/26/2013, 23:04
|
#6
|
elite*gold: 0
Join Date: Aug 2011
Posts: 1,190
Received Thanks: 549
|
Programm das die bmp erstellt
Code:
ic::con.setTitle(L"Bla bla");
HWND capture = FindWindow(0, L"Test");
while(true)
{
RECT rect;
GetWindowRect(capture, &rect);
size_t dx = 244;
size_t dy = 48;
BITMAPINFO info;
info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
info.bmiHeader.biWidth = dx;
info.bmiHeader.biHeight = dy;
info.bmiHeader.biPlanes = 1;
info.bmiHeader.biBitCount = 24;
info.bmiHeader.biCompression = BI_RGB;
info.bmiHeader.biSizeImage = 0;
info.bmiHeader.biXPelsPerMeter = 0;
info.bmiHeader.biYPelsPerMeter = 0;
info.bmiHeader.biClrUsed = 0;
info.bmiHeader.biClrImportant = 0;
HBITMAP bitmap = 0;
BYTE* memory = 0;
HDC device = GetDC(capture);
bitmap = CreateDIBSection(device, &info, DIB_RGB_COLORS, (void**)&memory, 0, 0);
ReleaseDC(capture, device);
HDC winDC = GetWindowDC(capture);
HDC memDC = CreateCompatibleDC(winDC);
SelectObject(memDC, bitmap);
BitBlt(memDC, 0, 0, dx, dy, winDC, 0, 0, SRCCOPY);
DeleteDC(memDC);
ReleaseDC(capture, winDC);
char *buffer = {"Npm.bmp"};
basic_ofstream<char> file(buffer, ios::binary);
BITMAPFILEHEADER fileHeader;
BITMAPINFOHEADER infoHeader;
fileHeader.bfType = 0x4d42;
fileHeader.bfSize = 0;
fileHeader.bfReserved1 = 0;
fileHeader.bfReserved2 = 0;
fileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
infoHeader.biSize = sizeof(infoHeader);
infoHeader.biWidth = dx;
infoHeader.biHeight = dy;
infoHeader.biPlanes = 1;
infoHeader.biBitCount = 24;
infoHeader.biCompression = BI_RGB;
infoHeader.biSizeImage = 0;
infoHeader.biXPelsPerMeter = 0;
infoHeader.biYPelsPerMeter = 0;
infoHeader.biClrUsed = 0;
infoHeader.biClrImportant = 0;
file.write((char*)&fileHeader, sizeof(fileHeader));
file.write((char*)&infoHeader, sizeof(infoHeader));
int wbytes = (((24*dx + 31) & (~31))/8);
int tbytes = (((24*dx + 31) & (~31))/8)*dy;
file.write((char*)memory, tbytes);
DeleteObject(bitmap);
bitmap = 0;
memory = 0;
Sleep(50);
}
Code vom Timer der Form, der es aktualisieren soll
Code:
private: System::Void pictureBox1_Click(System::Object^ sender, System::EventArgs^ e) {
pictureBox1->Image = Image::FromFile("Npm.bmp");
}
e/ Ok, hab das Problem, das Bild wird zwar neugeladen, aber es wird von dem anderen Programm nicht aktualisiert daher bleibt das alte Bild, da es von der Form benutzt wird. Weiß wer dazu ne Lösung?
|
|
|
07/27/2013, 07:49
|
#7
|
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
|
Quote:
Originally Posted by marbra1
Code:
private: System::Void pictureBox1_Click(System::Object^ sender, System::EventArgs^ e) {
pictureBox1->Image = Image::FromFile("Npm.bmp");
}
|
|
|
|
07/27/2013, 14:46
|
#8
|
elite*gold: 58
Join Date: Jun 2008
Posts: 2,311
Received Thanks: 8,420
|
Ich glaube, dass das tatsächlich sein Ernst ist.. Wenn ja -> das ist ja furchtbar :O
Lass das, dieses hässliche C++/CLI nervt nur
Padmak
|
|
|
07/27/2013, 16:08
|
#9
|
elite*gold: 240
Join Date: Dec 2006
Posts: 1,579
Received Thanks: 1,609
|
Quote:
Originally Posted by Padmak
Ich glaube, dass das tatsächlich sein Ernst ist.. Wenn ja -> das ist ja furchtbar :O
Lass das, dieses hässliche C++/CLI nervt nur
Padmak
|
Das passt einfach nicht
|
|
|
08/03/2013, 16:21
|
#10
|
elite*gold: 2
Join Date: Jan 2010
Posts: 422
Received Thanks: 1,160
|
Quote:
private: System::Void pictureBox1_Click(System::Object^ sender, System::EventArgs^ e)
{
pictureBox1->Image = Image::FromFile("Npm.bmp");
}
|
Wenn du nach CLR>CLI Klassen/Funktionen/Beispielen im Internet suchst findest du fast nichts (selbst in der MSDN-Bibliothek kaum).
Ich empfehle dir nach C# Beispielen zu suchen, diese lassen sich mit ein paar Änderungen fast immer in C++/CLR übertragen.
z.B. von
Quote:
BITMAPINFO info;
info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
info.bmiHeader.biWidth = dx;
info.bmiHeader.biHeight = dy;
info.bmiHeader.biPlanes = 1;
info.bmiHeader.biBitCount = 24;
info.bmiHeader.biCompression = BI_RGB;
info.bmiHeader.biSizeImage = 0;
info.bmiHeader.biXPelsPerMeter = 0;
info.bmiHeader.biYPelsPerMeter = 0;
info.bmiHeader.biClrUsed = 0;
info.bmiHeader.biClrImportant = 0;
|
Wenn du schon CLR>CLI benutzt dann solltest du auch die Klassen aus dem namespace "System:  rawing" benutzen.
Quote:
|
Lass das, dieses hässliche C++/CLI nervt nur
|
Ja CLR ist schon hässlich, aber wenn man schnell ein Programm schreiben will, dass man wahrscheinlich nur 1 mal benutzt ist es leichter mit CLR (oder einer anderen Prog. Sprache) zu arbeiten als sich durch 50 Bibliotheken zu beißen.
// Bin selbst kein CLR pro. habe ws nur aus ein paar code snippets "gelernt"
|
|
|
08/03/2013, 17:29
|
#11
|
elite*gold: 58
Join Date: Jun 2008
Posts: 2,311
Received Thanks: 8,420
|
Quote:
Originally Posted by .Lol
Wenn du nach CLR>CLI Klassen/Funktionen/Beispielen im Internet suchst findest du fast nichts (selbst in der MSDN-Bibliothek kaum).
Ich empfehle dir nach C# Beispielen zu suchen, diese lassen sich mit ein paar Änderungen fast immer in C++/CLR übertragen.
|
Warum sollte man das tun wollen? Es gibt C# und es gibt C++, für was braucht man da einen (hässlichen) Hybriden? :/
Padmak
|
|
|
08/04/2013, 15:22
|
#12
|
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
|
Quote:
Originally Posted by Padmak
Warum sollte man das tun wollen? Es gibt C# und es gibt C++, für was braucht man da einen (hässlichen) Hybriden? :/
Padmak
|
Manche Menschen wollen die Welt einfach nur brennen sehen.
|
|
|
Similar Threads
|
code : Mauszeiger von pixel x zu pixel x bewegen
06/04/2012 - AutoIt - 9 Replies
Hey ich hab mich noch nicht wirklich mit Auto it beschäftigt
Ich suche eben einen code der den Mauszeiger von Position x zu position x bewegt .
Und AutiIt hat doch eine Funktion um die position zu ermitteln also der Punkt ist meinetwegen 1773 pixel.
mfg and thx 4 help;)
nicki240
|
All times are GMT +1. The time now is 23:34.
|
|