Sorry, I still don't understand your problem. Why are you converting the image? The standard code should work fine in displaying it. Actually the code I pointed you to is used for that. >From your screen shot I would expect that your drawing code uses the wrong sizes. To verify this it would help if you sent a bit more of your code.
Fred PS: For drawing pre-multiplied images get used. Better convert in to that format. But this is completely unrelated to your problem. Am 15.02.2011 20:34, schrieb indieAN: > Hi, > I copied the source of convertToFormatBitsPerSample and implemented > in a category to NSBitmapImageRep. Now I am converting > all image format to a standard format using > > bitmap = [bitmap convertToFormatBitsPerSample: 8 > samplesPerPixel: 4 > hasAlpha: YES > isPlanar: NO > colorSpaceName: > NSDeviceRGBColorSpace > bitmapFormat: > NSAlphaNonpremultipliedBitmapFormat > bytesPerRow: 0 > bitsPerPixel: 0]; > > > All other images (RBGA) renders great. But still no luck on this gray > scale image. I am assuming that above code converts gray scale image to > std RBGA format. So same rendering code should works (It is not included > here ). I am attaching output that got from rendering. > > Thanks to all, > -ANIndie > > > > On Mon, 2011-02-14 at 17:31 +0100, Fred Kiefer wrote: >> I tried to render your image with a normal GNUstep test application and >> it seems to display correctly. From that I would say that it gets loaded >> by the PNG code correctly. This makes me wonder why you think that there >> might be a bug in the grayscale rendering? As far as I see rendering >> isn't involved in your case. More likely the bug is in your own >> conversion code. I tried to have a quick look at your code, but could >> not make much sense out of it. Why would you want to put in the width >> and the hight separately from the image? As far as I know these values >> might be completely off. >> If you just want to learn how to convert between different image format, >> have a look that the method >> >> - (NSBitmapImageRep *) _convertToFormatBitsPerSample: (int)bps >> samplesPerPixel: (int)spp >> hasAlpha: (BOOL)alpha >> isPlanar: (BOOL)isPlanar >> colorSpaceName: >> (NSString*)colorSpaceName >> bitmapFormat: >> (NSBitmapFormat)bitmapFormat >> bytesPerRow: (int)rowBytes >> bitsPerPixel: (int)pixelBits >> >> I added that to NSBitmapImage a few years ago just to document the >> proper way of conversion. Even in GNUstep itself we had a lot of >> incomplete image conversions. >> >> Cheers >> Fred >> >> >> Am 13.02.2011 18:40, schrieb Indie AN: >>> Hi, >>> I had attached the image along this mail. Its part of >>> cocos2d-iphone project >>> (https://github.com/ANindie/cocos2d-GNUstep/raw/1219df69bd64feb6aa2ae83073e1f9e380e6f9ad/src/Resources/Images/stars2-grayscale.png). >>> As per 'Gimp 'it contains 2 channels, alpha and luminosity. 64*64 pixels. >>> GNUstep NSBitmapimagerep reports that samplesPerPixel=2, >>> BytesPerRow=128. So I tried to use the data provided by >>> NSBitmapimagerep to generate RBGA pixel data. Either my approach >>> going wrong or NSBitmapimagerep doesn't give proper data. >>> Also I tried rendering image assuming BytesPerRow = 64*4 half of the >>> image renders properly rest is black/garbage. >>> >>> >>> On 2/12/11, Gregory Casamento <[email protected]> wrote: >>>> Which image? I don't see an attachment or a link. >>>> >>>> On Thursday, February 10, 2011, indieAN <[email protected]> wrote: >>>>> Hi, >>>>> I trying to render a gray scale image (contains 2 channels luminosity >>>>> and alpha) using opengl. Actually this image is a png image. I am >>>>> decoding it using nsbitmaprep. But only garbage gets rendered. Can any >>>>> body tell whats wrong with following code. Or their is bug in >>>>> nsbitmapImagerep for rendering grayscale? >>>>> >>>>> >>>>> -(id) initPremultipliedATextureWithBitmap:(NSBitmapImageRep*)bitmap >>>>> pixelsWide:(NSUInteger)POTWide pixelsHigh:(NSUInteger)POTHigh >>>>> { >>>>> >>>>> short bytesPerPixel = [bitmap bitsPerPixel]>>3;//2 >>>>> unsigned char * data = calloc(1, POTHigh * POTWide * 4); >>>>> const unsigned char * originaldata = [bitmap bitmapData]; >>>>> >>>>> >>>>> >>>>> NSSize size=NSMakeSize([bitmap pixelsWide],[bitmap >>>>> pixelsHigh]); //64*64 >>>>> NSUInteger bytesPerRow = [bitmap bytesPerRow];//128 >>>>> NSUInteger pixelPerRow = bytesPerRow / bytesPerPixel;//64 >>>>> CCTexture2DPixelFormat pixelFormat; >>>>> >>>>> NSUInteger inputPixelPerRow = POTWide * 4; >>>>> >>>>> >>>>> >>>>> int spp = [bitmap samplesPerPixel]; //2 >>>>> >>>>> >>>>> #define FLIPPED_BITMAP 0 >>>>> int i; >>>>> >>>>> for (i = 0; i < size.height ; i++) >>>>> { >>>>> >>>>> >>>>> #if FLIPPED_BITMAP >>>>> int vrow=(int)size.height -i-1; >>>>> #else >>>>> int vrow=i; >>>>> #endif >>>>> >>>>> >>>>> if(spp == 2) >>>>> { >>>>> >>>>> >>>>> unsigned char * dest = data + (vrow * POTWide * 4); >>>>> const unsigned char * src = originaldata + (i * bytesPerRow); >>>>> >>>>> int k=0; >>>>> for(k=0; k<size.width ; k++) >>>>> { >>>>> >>>>> *(dest +k*4+3)=*(src+k*2+1); //alpha >>>>> >>>>> *(dest +k*4) = *(src+k*2+2);//r >>>>> *(dest +k*4 + 1) = *(src+k*2);//g >>>>> *(dest +k*4 + 2) = *(src+k*2);//b >>>>> >>>>> } >>>>> } >>>>> else >>>>> memcpy(data + (vrow * POTWide * 4), originaldata + (i * >>>>> bytesPerRow), bytesPerRow); >>>>> } >>>>> >>>>> >>>>> >>>>> self = [self initWithData:data pixelFormat:pixelFormat >>>>> pixelsWide:POTWide pixelsHigh:POTHigh contentSize:size >>>>> unpackRowLength:POTWide]; >>>>> >>>>> >>>>> return self; >>>>> }; > _______________________________________________ Discuss-gnustep mailing list [email protected] http://lists.gnu.org/mailman/listinfo/discuss-gnustep
