martinrybak/SQLClient

jpegdecompresssurface : picture decode failed : e00002d1

totoourworld opened this issue · 39 comments

jpegdecompresssurface : picture decode failed : e00002d1
I can get exact same data as image data from sql server.
So i try to load image from NSData, below the code,

  • (void)process:(NSArray*)results
    {
    NSArray *table=[results objectAtIndex:0];
    NSDictionary *row=[table objectAtIndex:0];
    NSData *image_source=[row objectForKey:@"Company_Logo"];
    UIImage *image=[[UIImage alloc] initWithData:image_source];
    image=[UIImage imageWithData:image_source];
    [self.imageView setImage :image];
    }
    but the final step , it is showing like this, in here
    // [self.imageView setImage :image];
    jpegdecompresssurface : picture decode failed : e00002d1
    How can i solve this?
    Regards.

Please try the types branch.

I used types branch and used the sample project for testing but same.
can you give me the source code for that?
I checked the
NSData *image_source=[row objectForKey:@"Company_Logo"];
by log the value.
but same as data in sql.
How can i use this for mapping to uiimage type?
can you teach me?
i want your reply. thanks .
king regards,

It could be related to this:
https://msdn.microsoft.com/en-us/library/ms177687(v=sql.90).aspx

What version of SQL Server are you using?
What data type is the column with the image?
If possible, can you attach the image file here?

I am using the SQL EXPRESS 2016.
I used the Company_Logo(image,null) for saving/loading image.

Additionally, I am trying to load the image that saved by C# program i made.
In android , the image can be read by byte array and convert that to bitmap image, and it is working.
In C# , it is also working well.

but in iOS when i tried to do like that with above code , it is showing
jpegdecompresssurface : picture decode failed : e00002d1

These three pictures , i used to try.
jpg file looks like that issue , but png file is not showing at all.

Hello , Mr.Martin Rybak.
I tried to debug the code and found something related.
So, (void)process:(NSArray*)results
{
NSArray *table=[results objectAtIndex:0];
NSDictionary *row=[table objectAtIndex:0];
NSData *image_source=[row objectForKey:@"Company_Logo"];
UIImage image=[[UIImage alloc] initWithData:image_source];
image=[UIImage imageWithData:image_source];
[self.imageView setImage :image];
}
in this code ,(NSArray
) results is returning values from sql.
in here , i checked the @"Company_Logo".
It was NSInlineData and 4096bytes.
That's why the above 5kb jpg image is not showing full.
I tried to use small jpg image (for example 400bytes) , and it is showing well.
Can you give me some solution for large image?
Really thanks for your help.
Regards.

Please put a breakpoint on line 544 of SQLClient.m:

https://github.com/martinrybak/SQLClient/blob/types/SQLClient/SQLClient/SQLClient/SQLClient.m#L544

What is the value of column->size?

in image type the column size is 4096

column->size is 4096

OK, to be sure, put a breakpoint on this line and verify that dbcollen(_connection, c) is returning 4096 for your image column.

https://github.com/martinrybak/SQLClient/blob/types/SQLClient/SQLClient/SQLClient/SQLClient.m#L261

Also try changing your data type from image to varbinary(max)

I tried both type, means , i saved the data to image type and varbinary(max) type
and read the data using your framework.
In 261 , breakpoint, the column.size is 4096 for both types , sir.

OK, in the freetds docs I found the following:

text size: default value of TEXTSIZE, in bytes. For text and image datatypes, sets the maximum width of any returned column. Cf. set TEXTSIZE in the T-SQL documentation for your server.

http://www.freetds.org/userguide/freetdsconf.htm

Try adding a file called freetds.conf to your app with these contents:

[global]
text size = 10000

Then add an environment variable to your app called FREETDS whose value is the path to that file.

http://www.freetds.org/userguide/envvar.htm

See if that helps.

sorry but my app means?
ios project, sir?

Yes, add it to your iOS project.

yeah ,i added freetds.conf to SQLClint folder , but i am not sure about the environment variable adding , can you guide me a bit more , sir?
thanks.

freetds.conf path would be full path like this "/Volumes/Mac_Data/KO/pos_australia/latest/SQLClient_Type/SQLClient-types/SQLClient/SQLClient/SQLClient/freetds.conf"
or what's the right path of freetds.conf file, sir?

I added with your requirement and ran the project
ntext type in sql returning column->size 8192 bytes in dbcollen(_connection, c) 164 line.
but image type and varbinary is same as 4096, sir.

I got file path using your reference source code ,
"/var/containers/Bundle/Application/0E8B03A5-869A-4435-AE41-21972F55CA4B/SQLClient.app/freetds.conf"
so i set above path as value of FREETDS.

what value would i check by debugging?

The value must be relative to your app. Try freetds.conf instead.

I changed with your instruction
and tested , again . but the column->size of image is still 4096

Try setting other values to verify that TDS is finding your file.
http://www.freetds.org/userguide/freetdsconf.htm

i setup the sql express 2016 to other computer windows 10 system.
in here , TDS version how can i check this?

I am really sorry for bothering your time, but can you teach me via my screen? like using teamviewer,sir?

I'm sorry, I can't do that. Please do some reading up on FreeTDS until you can customize the text size setting. I think that is the problem.

so the conclsion is change the text size?

i facing this issue in my iOS app. please help me out. thank you.

in android application is working fine to get binary image from SQL server but facing issue in iOS and load some part of image only.

screen shot 2018-08-04 at 11 38 59 am
@totoourworld i'm getting size of image is still 4096

is this issue of getting size of image 4096byte is from SQL SERVER ?