امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
کلمات کلیدی
ذخیره عکس در opengl

ذخیره عکس در OpenGL
#1
سلام دوستان یه سوال داشتم چطور میشه یک عکس رو ذخیره کرد

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


http://0up.ir/do.php?imgf=GL.jpg
[font=Verdana][size=medium][url=http://hamedtahrpor.rozblog.com/][align=justify]نمونه کار های من[/align][/url][/size][/font]
پاسخ
#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://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://telegram.me/gameoverblog

من به سرچشمه خورشید نه خود بردم راه/ذره ای بودم و مهر تو مرا بالا برد
من خسی بی سرو پایم که به سیل افتادم/او که می رفت مرا هم به دل دریا برد


پاسخ
#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://telegram.me/gameoverblog

من به سرچشمه خورشید نه خود بردم راه/ذره ای بودم و مهر تو مرا بالا برد
من خسی بی سرو پایم که به سیل افتادم/او که می رفت مرا هم به دل دریا برد


پاسخ




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