[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Rendering grayscale on opengl using nsbitmaprep
From: |
Indie AN |
Subject: |
Re: Rendering grayscale on opengl using nsbitmaprep |
Date: |
Wed, 23 Feb 2011 21:06:33 +0530 |
Ok. Let me clear it for once. I am trying to render image using
opengl, that we normally do for games. Opengl do not speak nsimage.
They speak textures . All i needed is magic piece of code that
converts every image to raw rbga or rbg data. In mac they do using
coreimage framework. But its ok. I can live happily without
gray scale images. White image is sufficient. Thanks to everybodies
time.
On 2/16/11, Fred Kiefer <fredkiefer@gmx.de> wrote:
> 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 <greg.casamento@gmail.com> wrote:
>>>>> Which image? I don't see an attachment or a link.
>>>>>
>>>>> On Thursday, February 10, 2011, indieAN <an.indian.indie@gmail.com>
>>>>> 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;
>>>>>> };
>>
>
>
--
Sent from my mobile device
- Re: Rendering grayscale on opengl using nsbitmaprep, (continued)
- Re: Rendering grayscale on opengl using nsbitmaprep, Indie AN, 2011/02/14
- Message not available
- Re: Rendering grayscale on opengl using nsbitmaprep, indieAN, 2011/02/16
- Re: Rendering grayscale on opengl using nsbitmaprep, Fred Kiefer, 2011/02/15
- Re: Rendering grayscale on opengl using nsbitmaprep, Indie AN, 2011/02/22
- Re: Rendering grayscale on opengl using nsbitmaprep, Fred Kiefer, 2011/02/23
- Re: Rendering grayscale on opengl using nsbitmaprep, Indie AN, 2011/02/23
- Re: Rendering grayscale on opengl using nsbitmaprep, AN Indie, 2011/02/25
- Re: Rendering grayscale on opengl using nsbitmaprep, Fred Kiefer, 2011/02/25
- Re: Rendering grayscale on opengl using nsbitmaprep, AN Indie, 2011/02/27
- Re: Rendering grayscale on opengl using nsbitmaprep, Fred Kiefer, 2011/02/28
- Re: Rendering grayscale on opengl using nsbitmaprep,
Indie AN <=