Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 23:34

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Pixel scan

Discussion on Pixel scan within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
Doktor.'s Avatar
 
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^.
Doktor. is offline  
Old 07/25/2013, 17:19   #2
 
.SkyneT.'s Avatar
 
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.
.SkyneT. is offline  
Old 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);
taigatenshi is offline  
Thanks
1 User
Old 07/26/2013, 21:29   #4
 
Doktor.'s Avatar
 
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?
Doktor. is offline  
Old 07/26/2013, 22:47   #5
 
elite*gold: 0
Join Date: Jun 2013
Posts: 63
Received Thanks: 4
Quote:
Originally Posted by marbra1 View Post
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.
Excepti0n is offline  
Old 07/26/2013, 23:04   #6
 
Doktor.'s Avatar
 
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?
Doktor. is offline  
Old 07/27/2013, 07:49   #7
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Quote:
Originally Posted by marbra1 View Post
Code:
	private: System::Void pictureBox1_Click(System::Object^  sender, System::EventArgs^  e) {
				 
				 pictureBox1->Image = Image::FromFile("Npm.bmp");

			 }
Tyrar is offline  
Old 07/27/2013, 14:46   #8
 
Padmak's Avatar
 
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
Padmak is offline  
Old 07/27/2013, 16:08   #9
 
Bl@ze!'s Avatar
 
elite*gold: 240
Join Date: Dec 2006
Posts: 1,579
Received Thanks: 1,609
Quote:
Originally Posted by Padmak View Post


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
Bl@ze! is offline  
Old 08/03/2013, 16:21   #10
 
.Lol's Avatar
 
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"
.Lol is offline  
Old 08/03/2013, 17:29   #11
 
Padmak's Avatar
 
elite*gold: 58
Join Date: Jun 2008
Posts: 2,311
Received Thanks: 8,420
Quote:
Originally Posted by .Lol View Post
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
Padmak is offline  
Old 08/04/2013, 15:22   #12
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Quote:
Originally Posted by Padmak View Post
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.
Tyrar is offline  
Thanks
2 Users
Reply


Similar Threads 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.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.