درود مهمان گرامی! ثبت نام


امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
ذخیره عکس در OpenGL
#1
سلام دوستان یه سوال داشتم چطور میشه یک عکس رو ذخیره کرد

مثلا این صفحه رو ذخیره کنم ؟؟؟


http://0up.ir/do.php?imgf=GL.jpg
پاسخ
#2
طبق تحقیقم

ابتدا باید اسکرین رو بافر کنی(توی متغیر موقتی ذخیره کنی):
کد php:
public BufferedImage makeScreenshot() {
    
BufferedImage screenshot = new BufferedImage(widthheightBufferedImage.TYPE_INT_RGB);
    
Graphics graphics screenshot.getGraphics();

    
ByteBuffer buffer BufferUtils.createByteBuffer(width height 3);

    
glReadPixels(00widthheightGL_RGBGL_BYTEbuffer);


    for (
int h 0heighth++) {
        for (
int w 0widthw++) {
            
// The color are the three consecutive bytes, it's like referencing
            // to the next consecutive array elements, so we got red, green, blue..
            // red, green, blue, and so on..
            
graphics.setColor(new Colorbuffer.get()*2buffer.get()*2buffer.get()*));
            
graphics.drawRect(w,height h11); // height - h is for flipping the image
        
}
    }
    return 
screenshot;

سپس متغیر رو با رمز گذاری PNG در فایل ذخیره کنی:
کد php:
try {

            
BufferedImage screenshot makeScreenshot();

            
ImageIO.write(screenshot"png", new File("D:/screen.png"));
        } catch (
IOException ex) {
             
// You know ... what to do here :P
        

http://wiki.lwjgl.org/index.php?title=Ta...reen_Shots
https://cafebazaar.ir/app/ir.s.s.hek.nokh/?l=fa
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.




پاسخ
#3
اینم یک تابع برای ذخیره اسکرین شات در فایل bmp:
کد php:
void SaveScreenshot(int winWidthint winHeight)
{
imageData malloc(winWidth*winHeight*3); // allocate memory for the imageData
memset(imageData0winWidth*winHeight*3); // clear imageData memory contents
// read the image data from the window
glReadPixels(00winWidth–1winHeight–1GL_RGBGL_UNSIGNED_BYTEimageData);
// write the image data to a file
WriteBitmapFile(“writeout.bmp”winWidthwinHeight, (unsigned char*)imageData);
// free the image data memory
free(imageData);

https://cafebazaar.ir/app/ir.s.s.hek.nokh/?l=fa
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.




پاسخ
 سپاس شده توسط Hamed-razor
#4
لود فایل بیت مپ با اپن جی ال+خواندن فایل تصویری و نمایش آن توسط openGL
این کد بسیار کمیاب هست و بهترین کدی بود که براتون قرار میدیم:
نمایش فایل bmp:
ابتدا تابع LoadBitmapFile رو کدنویسی می کنیم:

کد php:
unsigned char *LoadBitmapFile(char *filenameBITMAPINFOHEADER *bitmapInfoHeader)
{
FILE *filePtr// the file pointer
BITMAPFILEHEADER bitmapFileHeader// bitmap file header
unsigned char *bitmapImage// bitmap image data
int imageIdx 0// image index counter
unsigned char tempRGB// swap variable
// open filename in "read binary" mode
filePtr fopen(filename"rb");
if (
filePtr == NULL)
return 
NULL;
// read the bitmap file header
fread(&bitmapFileHeadersizeof(BITMAPFILEHEADER), 1filePtr);
// verify that this is a bitmap by checking for the universal bitmap id
if (bitmapFileHeader.bfType != BITMAP_ID)
{
fclose(filePtr);
return 
NULL;
}
// read the bitmap information header
fread(bitmapInfoHeadersizeof(BITMAPINFOHEADER), 1filePtr);
// move file pointer to beginning of bitmap data
fseek(filePtrbitmapFileHeader.bfOffBitsSEEK_SET);
// allocate enough memory for the bitmap image data
bitmapImage = (unsigned char*)malloc(bitmapInfoHeader->biSizeImage);
// verify memory allocation
if (!bitmapImage)
{
free(bitmapImage);
fclose(filePtr);
return 
NULL;
}
// read in the bitmap image data
fread(bitmapImage1bitmapInfoHeader->biSizeImagefilePtr);
// make sure bitmap image data was read
if (bitmapImage == NULL)
{
fclose(filePtr);
return 
NULL;
}

// swap the R and B values to get RGB since the bitmap color format is in BGR
for (imageIdx 0imageIdx bitmapInfoHeader->biSizeImageimageIdx+=3)
{
tempRGB bitmapImage[imageIdx];
bitmapImage[imageIdx] = bitmapImage[imageIdx 2];
bitmapImage[imageIdx 2] = tempRGB;
}
// close the file and return the bitmap image data
fclose(filePtr);
return 
bitmapImage;

fread تابع خواندن از فایل هست. f به معنی file می باشد.
توضیحات هر خط در کد بعد از // اومده . اگه یکم زبانتون خوب کنید متوجه میشید.
حالا با کد زیر برنامه رو تکمیل می کنیم و از تابعی که در بالا نوشتیم استفاده می کنیم:

کد php:
void Initialize()
{
glClearColor(0.0f0.0f0.0f0.0f); // clear background to black
glShadeModel(GL_SMOOTH); // use smooth shading
glEnable(GL_DEPTH_TEST); // hidden surface removal
glEnable(GL_CULL_FACE); // do not calculate inside of polys
glFrontFace(GL_CCW); // counterclockwise polygons are out
glEnable(GL_TEXTURE_2D); // enable 2D texturing
// load our bitmap file
bitmapData LoadBitmapFile("checker.bmp", &bitmapInfoHeader);
glGenTextures(1, &texture); // generate texture object
glBindTexture(GL_TEXTURE_2Dtexture); // bind the texture
AN OVERVIEW OF TEXTURE MAPPING
236
glTexParameteri
(GL_TEXTURE_2DGL_TEXTURE_MAG_FILTERGL_NEAREST);
glTexParameteri(GL_TEXTURE_2DGL_TEXTURE_MIN_FILTERGL_NEAREST);
// load the texture image
glTexImage2D(GL_TEXTURE_2D0GL_RGBbitmapInfoHeader.biWidth,
bitmapInfoHeader.biHeight0GL_RGBGL_UNSIGNED_BYTEbitmapData);

https://cafebazaar.ir/app/ir.s.s.hek.nokh/?l=fa
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.




پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Question سوال در مورد OpenGL Hamed-razor 2 967 4/10/1394، 11:08 عصر
آخرین ارسال: sajjad3011
  DirectX یا OpenGL محمدمهدی علیجانی 5 2,166 25/7/1393، 09:59 عصر
آخرین ارسال: sajjad3011



کاربرانِ درحال بازدید از این موضوع: 1 مهمان