|
먼저 답변 감사합니다.
제가 답변을 너무 늦게 봐서 이제서야 글을 올립니다.
지적해주신되로 저장 모듈을 바꾸어봤습니다.
graphicEX 대신 pngimage 사용했습니다.
제가 맞게 수정했는지는 잘 모르겠습니다 ㅜ,.ㅜ
제가 기초가 부족하고 이미지 처리는 처음 다뤄보는거라 너무 어렵네요
그래서 그런지 역시나 오류가 발생하네요
제가 코딩을 보시고 문제점이나 고쳐야 할 사항이 있으면 지적 부탁합니다.
오류메세지 First chance exception at $76C2C42D. Exception class EPngUnexpectedEnd with message
'This "Portable Network Graphics" image is invalid because the decoder found an unexpected end of the file.'. Process EvaBoard.exe (436)
//DB저장
TPngImage* png1 = new TPngImage();
TMemoryStream *ImageBuffer = new TMemoryStream();
ImageBuffer->LoadFromFile(OpenPictureDialog1->FileName);
png1->LoadFromStream(ImageBuffer);
Image1->Picture->Bitmap->Assign(png1);
delete ImageBuffer;
TMemoryStream *stream1 = new TMemoryStream();
if(str.UpperCase() == "PNG")
{
png1->SaveToStream(stream1);
}
else if(str.UpperCase() == "JPG" || str.UpperCase() == "JPEG")
{
Image1->Picture->Graphic->SaveToStream(stream1);
}
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
sql="insert into board1image(wrknum,filename,wrkimage,insid,insdate) values(";
sql+="'"+wrknum.Trim()+"',";
sql+="'"+filename.Trim()+"',";
sql+=":DATA,";
sql+="'"+WrkID.Trim()+"',";
sql+="getdate())";
ADOQuery1->SQL->Add(sql);
ADOQuery1->Parameters->ParamByName("DATA")->LoadFromStream(stream1,ftBlob);
ADOQuery1->ExecSQL();
//DB읽어오기
TBlobStream *stream1;
stream1 = (TBlobStream*)ADOQuery3->CreateBlobStream(ADOQuery3->FieldByName("wrkimage"), bmRead);
ItemName=ADOQuery3->FieldByName("filename")->AsString.Trim();
str=ExtractFileExt(ItemName.Trim());
FileName1->Caption=ADOQuery3->FieldByName("filename")->AsString.Trim();
if(str.UpperCase() == "PNG")
{
TPngImage *png = new TPngImage;
png->LoadFromStream(stream1);//<-오류발생하는부분
Image1->Picture->Bitmap->Assign(png);
delete png;
}
else if(str.UpperCase() == "JPG" || str.UpperCase() == "JPEG")
{
TJPEGImage *Jpeg = new TJPEGImage;
Jpeg->LoadFromStream(stream1);
Image1->Picture->Graphic=Jpeg;
delete Jpeg;
}
bugfree 님이 쓰신 글 :
: 궁금이 님이 쓰신 글 :
: : 버전: 빌더2010
: : DB:MS-SQL2000
: :
: : 이미지를 DB에 저장했다가 불러오는 모듈을 개발중입니다.
: : 기존에 단순 관리업무 모듈만 개발하다가 이미지 처리를 할려니 매우 방황하고 있습니다.
: :
: : 일단 포럼을 검색해보고 GraphicEx를 설치했습니다.
: : 이미지 저장은 잘되는거 같습니다.
: :
: : 하지만 읽어와서 TImage에 표시하고 싶은데 잘 되지가 않네요.
: : JPG는 잘되는거 같은데 PNG파일이 문제네요.
: :
: : 먼저 제가 사용한 코드를 적어보겠습니다.
: : 잘못 된 부분이 있으면 지적 부탁합니다.
: :
: : 많은분들의 도움 부탁드립니다.
: :
: : #include <jpeg.hpp>
: : #include <GraphicEx.hpp>
: :
: : //-이미지불러오기
: : AnsiString str;
: : Edit4->Text=ExtractFileName(OpenPictureDialog1->FileName);
: : str=ExtractFileExt(Edit4->Text.Trim());
: : if(str.UpperCase() == "PNG")
: : {
: : TMemoryStream *ImageBuffer = new TMemoryStream();
: : ImageBuffer->LoadFromFile(OpenPictureDialog1->FileName);
: : TPNGGraphic* png = new TPNGGraphic();
: : png->LoadFromStream(ImageBuffer);
: : Image1->Picture->Bitmap->Assign(png);
: : delete png;
: : }
: : else
: : {
: : Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
: : }
: : //-DB저장
: : TMemoryStream *stream1 = new TMemoryStream();
: : Image1->Picture->Graphic->SaveToStream(stream1);
: : ADOQuery1->Close();
: : ADOQuery1->SQL->Clear();
: : sql="insert into board1image(wrknum,filename,wrkimage,insid,insdate) values(";
: : sql+="'"+wrknum.Trim()+"',";
: : sql+="'"+filename.Trim()+"',";
: : sql+=":DATA,";
: : sql+="'"+WrkID.Trim()+"',";
: : sql+="getdate())";
: : ADOQuery1->SQL->Add(sql);
: : ADOQuery1->Parameters->ParamByName("DATA")->LoadFromStream(stream1,ftBlob);
: : ADOQuery1->ExecSQL();
: : //-DB불러오기
: : TBlobStream *stream1;
: : stream1 = (TBlobStream*)ADOQuery3->CreateBlobStream(ADOQuery3->FieldByName("wrkimage"), bmRead);
: : FileName=ADOQuery3->FieldByName("filename")->AsString.Trim();
: : str=ExtractFileExt(FileName.Trim());
: : if(str.UpperCase() == "PNG")
: : {
: : TPNGGraphic* png = new TPNGGraphic();
: : png->LoadFromStream(stream1);// <------오류발생하는 부분
: : //오류메세지"Cannot load image.Invalid or unexpected PNG image format."
: : Image1->Picture->Bitmap->Assign(png);
: : delete png;
: : }
: : else if(str.UpperCase() == "JPG" || str.UpperCase() == "JPEG")
: : {
: : TJPEGImage *Jpeg = new TJPEGImage;
: : Jpeg->LoadFromStream(stream1);
: : Image1->Picture->Graphic=Jpeg;
: : delete Jpeg;
: : }
: :
: :
: png가 안니고 bmp로 저장되고 있어서 그래요
: GraphicEx는 필요 없고요
: TPngImage 이용하면 됩니다
|